debram-2.0.0.4/0000755000000000000000000000000012527336137010004 5ustar debram-2.0.0.4/helper/0000755000000000000000000000000012523713663011262 5ustar debram-2.0.0.4/helper/update-ver0000755000000000000000000000354110336162054013257 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This helper script automatically updates debram's version number in # several files (the files are named in the following block). At the # top of debian/changelog, it begins a new template entry. Example # usage: # # $ update-ver 0.6.2 # # See helper/update-date for further notes. # # our $pat_ver = qr/(?"; $changelog_entry = <; my @fh = ; my @dl =
; my @cl = ; close DT; close FH; close DL; close CL; $dt[8] =~ s/^(Version )$pat_ver(,)/$1$ver$2/ or warn "$warn_msg${Def::debram_txt}\n"; { my $i = 0; ++$i until $i > $#fh || $fh[$i] =~ s/^(#define VERSION\s+")$pat_ver(")/$1$ver$2/; $i <= $#fh or warn "$warn_msg${Def::def_h}\n"; } { my $i = 0; ++$i until $i > $#dl || $dl[$i] =~ /^DATA\s*$/; ++$i until $i > $#dl || $dl[$i] =~ /^The version number is\s*$/; $i += 2; $i <= $#dl && $dl[$i] =~ s/^( )(\S(?:.*?\S)??)\s*$/$1$ver\n/ or warn "$warn_msg${Def::descloc}\n"; } unshift @cl, $changelog_entry; open DT, '>', ${Def::debram_txt}; open FH, '>', ${Def::def_h}; open DL, '>', ${Def::descloc}; open CL, '>', ${Def::changelog}; print DT @dt; print FH @fh; print DL @dl; print CL @cl; close DT; close FH; close DL; close CL; debram-2.0.0.4/helper/Alpha.pm0000644000000000000000000001067710462471546012661 0ustar package Alpha; use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This module provides, among others, the text-comparision function # Alpha::cmp_std_mn($$). The Alpha::cmp_std_mn() compares strings as # does Perl's `cmp' operator, but with a sort order appropriate to # debram-standard maintainer names. For example, it correctly sorts # # Tm GCC # Tm XML/SGML # J. v Baal # TH Black # G. Catenazzi # M. Danish # DI Lehn # E. Schubert # Z. TEst # X. Test # C. TEsta # B. Testa # A. TExt # E. Zini # Tm QA # # Because Debian's QA Team keeps many unrelated orphaned packages, # Alpha::cmp_std_mn() always sorts "Tm QA" last. Other teams are sorted # first. # # Heavyweight locale(7) support is not wanted here, nor is Unicode; a # simple eight-bit character-by-character sort is preferred. All # non-Latin-1 Debian maintainers have Latin-1-ized their own names, so # most of their names pose the debram little problem. But the the # debram's sort may not suit all Latin-1 maintainers. Regrettably no # perfect international sort is possible. # # See also the file `../maint.txt'. our @chr = ( ( map { chr } 0000 .. 0100 ), ( map { chr( $_ ), chr( $_ + 0040 ) } 0101 , 0300 .. 0306, # a 0102 .. 0103, 0307 , # bc 0104 , 0320 , # d 0105 , 0310 .. 0313, # e 0106 .. 0111, 0314 .. 0317, # fghi 0112 .. 0116, 0321 , # jklmn 0117 , 0322 .. 0326, 0330, # o 0120 .. 0123, # pqrs ), ( chr 0337 ), ( map { chr( $_ ), chr( $_ + 0040 ) } 0124 .. 0125, 0331 .. 0334, # tu 0126 .. 0131, 0335 , # vwxy ), ( chr 0377 ), ( map { chr( $_ ), chr( $_ + 0040 ) } 0132 , 0336 , # z ), ( map { chr } 0133 .. 0140, 0173 .. 0277, 0327, 0367 ), ); our %cap = map { chr() => 1 } 0101 .. 0132, 0300 .. 0326, 0330 .. 0336; our %ord = map { $chr[$_] => $_ } 0 .. $#chr; $#chr == 0377 && keys( %ord ) == @chr && eval { defined $ord{ chr $_ } or return 0 for 0 .. $#chr; my %n = map { $_ => 1 } values %ord; $n{$_} or return 0 for 0 .. $#chr; return 1; } or die "$0: bad \@chr or \%ord\n"; $@ and die $@; # The @Def::early and @Def::late lists include patterns which, when # matched, cause the name to sort early or late. The earliest pattern # stands first in @Def::early, the latest pattern stands last in # @Def::late. If a name matches two or more patterns, # # (a) @Def::late takes precedence over @Def::early; # (b) within @Def::early, earlier patterns take precendence; # (c) within @Def::late, later patterns take precedence. sub cmpa ($$) { my( $a, $b ) = @_; return 0 unless defined( $a ) || defined( $b ); return 1 unless defined( $a ); return -1 unless defined( $b ); my( $u, $v ) = ( length( $a ) - 1, length( $b ) - 1 ); my $z = $u <= $v ? $u : $v; my $cmp = 0; for my $test_eqv ( '1', '' ) { for ( my $i = 0; $i <= $z; ++$i ) { my $c = substr( $a, $i, 1 ); my $d = substr( $b, $i, 1 ); $cmp = $test_eqv && eqv( $c, $d ) ? 0 : $ord{$c} <=> $ord{$d}; return $cmp if $cmp; } $cmp = $u <=> $v; return $cmp if $cmp; } return $cmp; } sub eqv ($$) { my( $a , $b ) = @_; my( $uc, $lc ); $cap{$_} ? $uc : $lc = $_ for $a , $b ; defined or return '' for $uc, $lc; return $ord{$lc} == $ord{$uc} + 1; } sub init (;$) { local $_ = @_ ? shift() : $_; /^(.{${Def::n_init}}) \S/o; return $1; } sub lastn (;$) { local $_ = @_ ? shift() : $_; /^.{${Def::n_init}} (.{1,${Def::n_last}})$/o; return $1; } sub alpha (;$) { local $_ = @_ ? shift() : $_; my $last = lastn; my $i = 0; ++$i < length $last or return undef until $cap{ substr $last, $i, 1 }; return substr $last, $i; } sub cmp_std_mn ($$) { my( $a, $b ) = @_; return 0 unless defined( $a ) || defined( $b ); return 1 unless defined( $a ); return -1 unless defined( $b ); for my $late ( reverse @Def::pat_maint_late ) { return 1 if $a =~ $late && $b !~ $late ; return -1 if $b =~ $late && $a !~ $late ; } for my $early ( @Def::pat_maint_early ) { return 1 if $b =~ $early && $a !~ $early; return -1 if $a =~ $early && $b !~ $early; } return cmpa( alpha( $a ), alpha( $b ) ) || cmpa( lastn( $a ), lastn( $b ) ) || cmpa( init ( $a ), init ( $b ) ) || cmpa( $a, $b ); } 1; debram-2.0.0.4/helper/debparse/0000755000000000000000000000000010360052775013044 5ustar debram-2.0.0.4/helper/debparse/AllSrcBin.pm0000644000000000000000000000112110376441505015206 0ustar package AllSrcBin; use warnings; use strict; use integer; # Build a complete source hash or binary hash (but don't cross-reference # or cross-link it yet). sub new { my $class = shift; my $self = {}; bless $self, $class; for my $filename ( @_ ) { my $fh; open $fh, '<', $filename; while ( my $pkg = $self->instantiate_one( $fh ) ) { my $pname = $pkg->{Package}; if ( $self->{$pname} ) { warn "$0: warning: second listing of $pname ignored\n"; } else { $self->{$pname} = $pkg }; } close $fh; } return $self; } 1; debram-2.0.0.4/helper/debparse/DebSrc.pm0000644000000000000000000000066010300753561014541 0ustar package DebSrc; use warnings; use strict; use integer; use DebSrcBin; our @ISA = ( 'DebSrcBin' ); # List the build-dependency fields. our @dkey_subparsable_bdep = qw( Build-Depends Build-Depends-Indep Build-Conflicts Build-Conflicts-Indep ); # Instantiate and initialize a new DebSrc object. sub new { my $class = shift; my $src1 = DebSrcBin->new( @_ ); bless $src1, $class if defined $src1; return $src1; } 1; debram-2.0.0.4/helper/debparse/AllSrc.pm0000644000000000000000000000161210300774122014551 0ustar package AllSrc; use warnings; use strict; use integer; use AllSrcBin; our @ISA = ( 'AllSrcBin' ); use DebSrc; sub new { my $class = shift; my $src = AllSrcBin::new( 'AllSrc', @_ ); bless $src, $class; return $src; } sub instantiate_one { my( $src, $fh ) = @_; return DebSrc->new( $fh ); } # Refer each source to its respective binaries. (Notice that the # package cannot use AllBin, or there would be a circular package # dependency. However, because no AllBin method is called, because the # AllBin object is treated here as a simple hash, it does not matter. # This may breaks standard OO notions, but it seems to fit here.) sub refer_to_bin { my( $src, $bin ) = @_; $src->{$_}{binaries} = [] for keys %$src; for my $pname ( sort grep {length} keys %$bin ) { my $source = $bin->{$pname}{Source}; push @{ $src->{$source}{binaries} }, $pname; } return $src; } 1; debram-2.0.0.4/helper/debparse/DebBin.pm0000644000000000000000000000431310301173101014504 0ustar package DebBin; use warnings; use strict; use integer; use DebSrcBin; our @ISA = ( 'DebSrcBin' ); use AllProv; our %levels_default = ( dep => 30, bdep => 100, cfl => 40, bcfl => 100, ); our @dep_class = ( { class => 'dep', sense => 1, xkeys => [ { xkey => 'xPre-Depends' , lvl => 50 }, { xkey => 'xDepends' , lvl => 40 }, { xkey => 'xRecommends' , lvl => 30 }, { xkey => 'xSuggests' , lvl => 20 }, { xkey => 'renh' , lvl => 10 }, ], }, { class => 'bdep', sense => 1, xkeys => [ { xkey => 'xBuild-Depends' , lvl => 40 }, { xkey => 'xBuild-Depends-Indep' , lvl => 30 }, ], }, { class => 'cfl', sense => 0, xkeys => [ { xkey => 'xConflicts' , lvl => 40 }, { xkey => 'xReplaces' , lvl => 30 }, ], }, { class => 'bcfl', sense => 0, xkeys => [ { xkey => 'xBuild-Conflicts' , lvl => 40 }, { xkey => 'xBuild-Conflicts-Indep', lvl => 30 }, ], }, ); # Instantiate and initialize a new DebBin object. sub new { my $class = shift; my $bin1 = DebSrcBin->new( @_ ); bless $bin1, $class if defined $bin1; return $bin1; } # Check whether the DebBin's dependencies are fully satisfied at the # given selection level. Return an empty list if okay; a list of hashes # explaining the errors if not. sub are_all_deps_satisfied { my( $bin1, $prov, $levels, $sel ) = @_; my @err; for my $dep_class ( @dep_class ) { my $sense = $dep_class->{sense}; my $class = $dep_class->{class}; my $lvl_th = defined( $levels->{$class} ) ? $levels->{$class} : $levels_default{$class}; for my $xkeys ( @{ $dep_class->{xkeys} } ) { my $xkey = $xkeys->{xkey}; my $lvl = $xkeys->{lvl}; $lvl >= $lvl_th && defined( $bin1->{$xkey} ) or next; my $dep0 = $bin1->{$xkey}; for my $altern ( @$dep0 ) { ( $sense xor $prov->check_altern( $altern, $sel ) ) and push @err, { pname => $bin1->{Package}, relationship => $xkey, altern => $altern, }; } } } return @err; } 1; debram-2.0.0.4/helper/debparse/mod-list.txt0000644000000000000000000000014310300770335015324 0ustar CheckVer.pm DebSrcBin.pm AllProv.pm DebSrc.pm DebBin.pm AllSrcBin.pm AllSrc.pm AllBin.pm AllPkg.pm debram-2.0.0.4/helper/debparse/AllProv.pm0000644000000000000000000001604010301234334014746 0ustar package AllProv; use warnings; use strict; use integer; use CheckVer; # Terminology: # # * vname - The name of a provided package. In many cases this is the # same as the name of an actual binary; but in the model discussed # here, the vname is not attached to any specific actual binary. In # this model, all vnames are virtual. # # * pname - The name of one of the actual binaries which provides the # virtual package $vname. # # Each $vname has one or more @pname which provide it (where in Perl # idiom @pname means $pnames, more or less; the `@' is Perl's plural # marker). # # The topic of version numbers in this model can be slightly confusing. # In this model, the version numbers apply to vnames not to pnames! The # virtual package is the one which has the version. To complicate the # matter further, a vname can have more than one version number---and '' # is a valid number meaning [no version]. A simple example to # illustrate the point: # # Package: foo5 # Version: 5.1.2 # Provides: foo # # Package: bar # Version: 0.8 # Provides: foo5, foo # # Three vnames are seen: foo5, foo and bar. Note that bar is indeed a # vname, because every binary implicitly provides itself. This leads to # the AllProv entries # # foo5 => { # [no version] => { bar }, # 5.1.2 => { foo5 }, # }, # # foo => { # [no version] => { foo5, bar }, # }, # # bar => { # 0.8 => { bar }, # }, # # (Actually where it says "{ foo5, bar }", it technically # means "{ foo5=>1, bar=>1 }", but this detail is omitted to unclutter # the diagram. Only the keys matter here; the values are dummy trues.) # In the example, if one were looking for "foo5", one would find it # provided by either of the actual binaries bar and foo5. However, if # one were looking for "foo5 (>= 5)", then only the actual binary foo5 # could provide this. And "foo (>= 5)" is not available at all. # # The data pattern is # # vname => { # version_a => { pname1, pname2, pname3 }, # version_b => { pname4, pname4 }, # }, # # Debian plans to have versioned Provides at some time in the future. # The model used here correctly handles versioned Provides. The key to # understanding it all is that the version number applies not to the # pname (actual binary) but rather to the vname (virtual package), and # that each vname can have more than one version. # Instantiate and initialize a new AllProv object. Also, let the new # AllProv object and the existing AllBin object refer to one another by # the null '' hash key. (In a neat implementation, such a reference # would not be kept in the same spaces as the pnames and vnames. # However, a neat implementation would probably not be written in Perl. # This implementation seems to fit the present need. If the need grew # much, the module will probably want to be rewritten in C++, anyway.) # # As the foregoing implies, this constructor slightly modifies the # AllBin object passed to it. It adds thereto a reference to the new # AllProv object. # sub new { # Instantiate. my $class = shift; my $prov = {}; bless $prov, $class; # Build the provision hash. my $bin = shift; for my $pname ( grep {length} keys %$bin ) { my $bin1 = $bin->{$pname}; my $prov2 = $bin1->{prov2}; for my $vname ( keys %$prov2 ) { my $ver = $prov2->{$vname}; $prov->{$vname}{$_}{$pname} = 1 for keys %$ver; } } # Let the AllProv and AllBin hashes refer to one another. exists( $prov->{''} ) || exists( $bin->{''} ) and die "$0: impossible: null vname or pname\n"; $prov->{''} = $bin ; $bin ->{''} = $prov; return $prov; } # Does the distribution provide the specified vname, relationship and # version, at the specified selection level? sub does_provide { my( $prov, $vname, $rel, $ver, $sel ) = @_; defined $sel or $sel = $DebSrcBin::select_up_default; my $bin = $prov->{''} or die "$0: AllProv fails to refer to AllBin\n"; my $vhash = $prov->{$vname}; for my $ver0 ( keys %$vhash ) { if ( CheckVer::check_ver $ver0, $rel, $ver ) { return '1' unless $bin; my $pnames = $vhash->{$ver0}; $bin->{$_}{select} >= $sel and return '1' for keys %$pnames; } } return ''; } # Check a single dependency alternation. sub check_altern { my( $prov, $altern, $sel ) = @_; for my $vent ( @$altern ) { return '1' if $prov->does_provide( $vent->{vname}, $vent->{rel}, $vent->{ver}, $sel ); } return ''; } 1; # Return the pnames which could satisfy a given vname, relation and # version. Optionally accept a reference $$xpname to a pname string. # If so, # # * ban the pname from the return list; and # # * if $$xpname given happens to be the only pname provided, clear the # string $$xpname to undef. # # (Some callers of this method may find the $$xpname uninteresting. # This is fine; they can ignore it; in fact, they need not even provide # it. Other callers, however---particularly some indirect callers # through &pnames_provided_str()---may need to be signalled when the # only pname provided happens to be the same as the name of the # depending package---or more to the point, when it happens to be the # same as the name of the *conflicting* package. Debian binaries which # provide a virtual binary also typically replace and conflict with the # same virtual binary. When no other package selected provides the # virtual binary, the conflict is probably uninteresting to the user of # these DebParse modules. The reference $$xpname provides a convenient # way to flag interested indirect callers to the fact.) # # Further optionally accept a reference $$sel to a selection level. If # so, # # * ban unselected binaries from the return list; and # # * if this leaves no binaries, clear $$sel to undef. # sub pnames_provided { my( $prov, $vname, $rel, $ver, $xpname, $xsel ) = @_; $prov->{$vname} or return (); my $bin = $prov->{''} or die "$0: AllProv fails to refer to AllBin\n"; my $vhash = $prov->{$vname}; my %pname; for my $ver0 ( keys %$vhash ) { CheckVer::check_ver $ver0, $rel, $ver or next; $pname{$_} = 1 for keys %{ $vhash->{$ver0} }; } # Optionally ban pnames as needed from the output. { my @pname = keys %pname; if ( $xpname ) { delete $pname{$$xpname}; $$xpname = undef if @pname == 1 && $pname[0] eq $$xpname; } if ( $xsel ) { delete $pname{$_} for grep { $bin->{$_}{select} < $$xsel } @pname; $$xsel = undef unless keys %pname; } } return sort keys %pname; } # Return a string of pnames provided. Optionally suppress the # string if the only pname is identical to the vname. (Do not # suppress anything, however, based on $$xpname or $$xsel. Let the # caller and &pnames_provided() handle these. Just pass $$xpname # and $$xsel through.) sub pnames_provided_str { my( $prov, $vname, $rel, $ver, $suppress, $xpname, $xsel ) = @_; my @pp = $prov->pnames_provided( $vname, $rel, $ver, $xpname, $xsel ); return ( $suppress && @pp == 1 && $pp[0] eq $vname ) ? '' : ' [' . join( ' ', @pp ) . ']'; } 1; debram-2.0.0.4/helper/debparse/DebSrcBin.pm0000644000000000000000000001517710376441505015210 0ustar package DebSrcBin; use warnings; use strict; use integer; use CheckVer; # List the subparsable fields. our %dkey_subparsable = map {$_=>1} qw( Depends Pre-Depends Recommends Suggests Conflicts Provides Replaces Enhances Build-Depends Build-Depends-Indep Build-Conflicts Build-Conflicts-Indep Binary ); # List the required fields. (Do not list Source and xProvides, however. # These two fields are safely created in the instantiation even when the # control stanza does not provide them.) our @dkey_reqd = qw( Package Version Architecture ); # List the irregularly keyed fields. our %dkey_irreg = map {$_=>1} qw( task url ); # List the version-relational operators. our %rel = map {$_=>1} qw( << <= = >= >> ); # Define numerical priority levels. our %pri = ( required => 30, important => 20, standard => 10, optional => 0, extra => -10, ); our $pri_default = -10; # Set the default selection level and threshold. our $select_default = 0; our $select_up_default = 1; # Specify all the architectures of interest (typically # qw( all any i386 )). Or, set $arch_sense to 0 and specify all the # architectures *not* of interest. our $arch_sense = 1; our %arch = map {$_=>1} qw( all any i386 ); # Construct the pattern a subparsable field fits. my $subp_pat; { # This used to be one long pattern string, but then I couldn't read my own # pattern. It was too long. Splitting it into pieces here helps. (If you # don't know Perl very well, even splitting it may not help much, eh? # Actually, it's pretty straightforward Perl, so if you want to read Perl # then it would be worth your while to learn to read this.) -THB- my $pname = qr/([^\s()\[\]]+)/; my $archs = qr/\[\s*([^\[\]]*?)\s*\]/; my $rel = qr/([<=>]*)/; my $ver = qr/([^\s()]+?)/; my $rel_ver = qr/\(\s*${rel}\s*${ver}\s*\)/; $subp_pat = qr/^${pname}\s*${rel_ver}?\s*${archs}?$/; } # Private subroutine: evaluate an architecture string. sub eval_arch_str ($;$) { my( $arch_str, $arch_array ) = @_; my @arch; $$arch_array = \@arch if $arch_array; defined($arch_str) && length($arch_str) or return 1; @arch = map { my( $not, $arch ); ( $not, $arch ) = /^(!)?(\S+)$/ or die "$0: bad architecture string\n$_\n$arch_str\n"; +{ not => $not, arch => $arch, } } split ' ', $arch_str or return 1; my $so = !$arch[0]{not}; !$arch[$_]{not} eq $so or die "$0: mismatched `!' symbols\n$arch_str\n" for ( 1 .. $#arch ); $arch_sense or $so = !$so; $arch{$_} and return $so for map { $_->{arch} } @arch; return !$so; } # Instantiate and initialize a new DebSrcBin object. sub new { # Instantiate the object. my $class = shift; my $self = {}; bless $self, $class; # Retrieve the next stanza from the Sources or Packages file. my $fh = shift; { local $/ = ''; $self->{stanza} = <$fh>; # warn "vvvvvvvv\n$self->{stanza}^^^^^^^^\n"; # diagnostic } defined $self->{stanza} or $self = undef, return $self; $self->{ldesc} = ''; # Parse the stanza by line. for ( split /^/m, $self->{stanza} ) { if ( /^\s+\S/ ) { $self->{ldesc} .= $_; } elsif ( /^(\S*?):\s*(.*?)\s*$/ ) { my( $dkey, $dval ) = ( $1, $2 ); $dkey =~ /^[[:upper:]]/ || $dkey_irreg{$dkey} or die "$0: bad field key $dkey\n$self->{stanza}"; exists $self->{$dkey} and die "$0: repeated key $dkey\n$self->{stanza}"; $self->{$dkey} = $dval; } elsif ( /\S/ ) { die "$0: bad line\n$self->{stanza}"; } } # Ensure required fields. Skip if the architecture is irrelevant. # Number the Priority. defined( $self->{$_} ) && length( $self->{$_} ) or die "$0: missing $_ key\n$self->{stanza}" for @dkey_reqd; eval_arch_str $self->{Architecture} or return new( $class, $fh ); if ( defined $self->{Priority} ) { defined $pri{ $self->{Priority} } or die "$0: unknown priority $self->{Priority}\n$self->{stanza}"; $self->{pri} = $pri{ $self->{Priority} }; } else { $self->{pri} = $pri_default } # Subparse the subparsable lines. for my $dkey ( keys %$self ) { $dkey_subparsable{$dkey} or next; my $xkey = "x$dkey"; $self->{"$xkey"} = [ map { # The following is an *altern* (or *dependency alternative*): a # series of alternatives separated by " | " in the control # stanza. [ map { # Here is a single entry like "debram (>> 0.5.1)". my( $vname, $rel, $ver, $archs ); ( $vname, $rel, $ver, $archs ) = /$subp_pat/o or die "$0: cannot subparse\n$_\n$self->{stanza}"; if ( defined($ver) ) { if ( $rel eq '<' ) { $rel = '<=' } elsif ( $rel eq '>' ) { $rel = '>=' } elsif ( !length($rel) ) { $rel = '=' } $rel{$rel} or die "$0: unknown version-relational operator $rel\n" . "$self->{stanza}"; } else { $rel = '='; $ver = ''; } my $arch_array; eval_arch_str( $archs, \$arch_array ) ? { vname => $vname, rel => $rel, ver => $ver, arch => $arch_array, } : (); } grep /\S/, split /\s*\|\s*/ ] } grep /\S/, split /\s*,\s*/, $self->{$dkey} ]; } # Ensure the Source field. Create a select field. Let the package # provide itself. (These are unneeded but harmless for DebSrc # objects.) defined $self->{Source} or $self->{Source} = $self->{Package}; $self->{select} = $select_default; unshift @{ $self->{xProvides} }, [ { vname => $self->{Package}, rel => '=', ver => $self->{Version}, } ]; # Reform xProvides to show provided names and versions (if there are # any versions), producing data records of the form # # vname => { version_a, version_b }, # # (technically "{ version_a=>1, version_b=>1 }"), where the null string # indicates [no version]. # { my %prov2; for my $vhash2 ( map {@$_} @{ $self->{xProvides} } ) { $vhash2->{rel} eq '=' or die "$0: unclear which version is provided " . "with $vhash2->{rel}\n$self->{stanza}\n"; my $vname = $vhash2->{vname}; my $ver = $vhash2->{ver}; $prov2{$vname}{ defined($ver) ? $ver : '' } = 1; } $self->{prov2} = \%prov2; } return $self; } sub cmp_ver { my( $self, $ver ) = @_; CheckVer::cmp_ver_string $self->{Version}, $ver; } sub check_ver { my( $self, $rel, $ver ) = @_; CheckVer::check_ver $self->{Version}, $rel, $ver; } 1; debram-2.0.0.4/helper/debparse/notes-data-struct.txt0000644000000000000000000000100710301663306017155 0ustar In AllBin, vname => { version_a, version_b }, In AllProv, vname => { version_a => { pname1, pname2, pname3 }, version_b => { pname4, pname4 }, }, AllProv example: Package: foo5 Version: 5.1.2 Provides: foo Package: bar Version: 0.8 Provides: foo5, foo This leads to foo5 => { [no version] => { bar }, 5.1.2 => { foo5 }, }, foo => { [no version] => { foo5, bar }, }, bar => { 0.8 => { bar }, }, debram-2.0.0.4/helper/debparse/driver0000755000000000000000000000114410301663623014260 0ustar #! /usr/bin/perl # Here is a very simple sample driver for the DebParse modules. The # author's home directory is /home/t/. If you want to try this sample, # you'll have to adjust the directory names and filenames herein # accordingly. use warnings; use strict; use integer; BEGIN { unshift @INC, '/home/t/Debparse'; } use AllPkg; my $src_filename = '/home/t/archive/Sources.orig'; my $bin_filename = '/home/t/archive/Packages.orig'; # $AllPkg::verbosity = 60; my $all = AllPkg->new( $src_filename, $bin_filename ); $all->select_by_pri(); my @out = $all->analyze_and_report(); print @out; @out and exit 1; debram-2.0.0.4/helper/debparse/CheckVer.pm0000644000000000000000000000655310300773627015105 0ustar package CheckVer; use warnings; use strict; use integer; # Since no objects are instantiated here, this file provides just a # module, not a class. The subroutines given here compare and check # vname (virtual package) versions. # Private subroutines: compare version substrings. (Some of these # private subroutines, unlike the public ones below, assume defined # input.) sub cmp_ver_char ($$) { my( $a , $b ) = @_; my( $a0, $b0 ); for ( [ \$a, \$a0 ], [ \$b, \$b0 ], ) { my( $ab, $ab0 ) = @$_; $$ab0 = $$ab =~ /^[A-Za-z]$/ ? 0 : 1; } my $cmp1 = $a0 <=> $b0; $cmp1 and return $cmp1; $a cmp $b; } sub cmp_ver_substr_nondig ($$) { my( $a, $b ) = @_; my $a_len = length $a; my $b_len = length $b; for ( my $i = 0; $i < $a_len && $i < $b_len; ++$i ) { my $cmp1 = cmp_ver_char substr($a,$i,1), substr($b,$i,1); return $cmp1 if $cmp1; } $a_len <=> $b_len; } sub cmp_ver_substr_dig ($$) { my( $a, $b ) = @_; defined($a) && length($a) or $a = 0; defined($b) && length($b) or $b = 0; $a <=> $b; } sub cmp_ver_substr ($$) { my( $a, $b ) = @_; defined $a or $a = ''; defined $b or $b = ''; while ( length($a) || length($b) ) { my( $a_nondig, $a_dig ); my( $b_nondig, $b_dig ); for ( [ \$a, \$a_nondig, \$a_dig ], [ \$b, \$b_nondig, \$b_dig ], ) { my( $ab, $nondig, $dig ) = @$_; my $right; ( $$nondig, $$dig, $right ) = $$ab =~ /^([^0-9]*)([0-9]*)(.*)/; $$ab = $right; } my $cmp_nondig = cmp_ver_substr_nondig $a_nondig, $b_nondig; return $cmp_nondig if $cmp_nondig; my $cmp_dig = cmp_ver_substr_dig $a_dig , $b_dig ; return $cmp_dig if $cmp_dig ; } return 0; } # Public subroutine: compare version strings. sub cmp_ver_string ($$) { my( $a, $b ) = @_; defined($a) && defined($b) && length($a) && length($b) or return undef; my( $a_epoch, $a_upstream, $a_debian ); my( $b_epoch, $b_upstream, $b_debian ); for ( [ \$a, \$a_epoch, \$a_upstream, \$a_debian ], [ \$b, \$b_epoch, \$b_upstream, \$b_debian ], ) { # Separate the version string into its principal parts. # (See Policy 5.6.11, v 3.6.1.1.) my( $ab, $epoch, $upstream, $debian ) = @$_; ( $$epoch, $$upstream, $$debian ) = $$ab =~ /^(?:([0-9]*):)?([A-Za-z0-9+.:-]*?)(?:-([A-Za-z0-9+.]*))?$/ or die "$0: bad version number $$ab"; } my $cmp_epoch = cmp_ver_substr_dig $a_epoch , $b_epoch ; return $cmp_epoch if $cmp_epoch ; my $cmp_upstream = cmp_ver_substr $a_upstream, $b_upstream; return $cmp_upstream if $cmp_upstream; return cmp_ver_substr $a_debian , $b_debian ; } # Public subroutine: compare or check a vname's version against a given # $ver requirement. Note that when no $ver is given to check against, # the check is always passed. (But, when a $ver is given and the vname # has no version, the check is failed. A vname with no version can pass # no check, except when no standard is given to check against.) sub check_ver ($$$) { my( $ver0, $rel, $ver ) = @_; defined($ver ) && length($ver ) or return '1'; defined($ver0) && length($ver0) or return '' ; my $cmp1 = cmp_ver_string $ver0, $ver; !defined( $cmp1 ) || ( $rel eq '<<' && $cmp1 < 0 || $rel eq '<=' && $cmp1 <= 0 || $rel eq '=' && $cmp1 == 0 || $rel eq '>=' && $cmp1 >= 0 || $rel eq '>>' && $cmp1 > 0 ); } 1; debram-2.0.0.4/helper/debparse/AllBin.pm0000644000000000000000000000521410301236131014526 0ustar package AllBin; use warnings; use strict; use integer; use AllSrcBin; our @ISA = ( 'AllSrcBin' ); use CheckVer; use DebSrcBin; use AllProv; use DebSrc; use DebBin; use AllSrc; our $pri_min_default = 10; # List the various conflict fields. our %dep_cfl = map { map { $_->{xkey} => 1 } @{ $_->{xkeys} } } grep { !$_->{sense} } @DebBin::dep_class; sub new { my $class = shift; my $bin = AllSrcBin::new( 'AllBin', @_ ); bless $bin, $class; return $bin; } sub instantiate_one { my( $bin, $fh ) = @_; return DebBin->new( $fh ); } # Add the various build-dependency fields to the binaries. sub add_build_dep { my( $bin, $src ) = @_; for my $pname ( grep {length} keys %$bin ) { my $bin1 = $bin ->{$pname}; my $sname = $bin1->{Source}; my $src1 = $src ->{$sname}; for my $dkey ( @DebSrc::dkey_subparsable_bdep ) { my $xkey = "x$dkey"; $bin1->{$xkey} and die "$0: build-dependencies in the Packages file? $pname\n"; $src1->{$xkey} or next; $bin1->{$xkey} = $src1->{$xkey}; } } return $bin; } # Reverse package enhancements. sub reverse_enhance { my $bin = shift; my $prov = $bin->{''} or die "$0: AllBin fails to refer to AllProv\n"; $bin->{$_}{renh} = [] for ( grep {length} keys %$bin ); for my $pname ( sort grep {length} keys %$bin ) { my $bin1 = $bin->{$pname}; for my $enh1 ( map {@$_} @{ $bin1->{xEnhances} } ) { push @{ $bin->{$_}{renh} }, [ { vname => $pname, rel => '=', ver => $bin1->{Version}, } ] for $prov->pnames_provided( $enh1->{vname}, $enh1->{rel}, $enh1->{ver} ); } } return $bin; } # Select all packages meeting a minimum priority level. (This method is not # called automatically in any of the basic instantiations, but it is provided # for the user's convenience.) sub select_by_pri { my( $bin, $pri, $sel ) = @_; defined $pri or $pri = $pri_min_default; defined $sel or $sel = $DebSrcBin::select_up_default; for my $pname ( grep {length} keys %$bin ) { my $bin1 = $bin->{$pname}; $bin1->{select} = $sel if $bin1->{select} < $sel && $bin1->{pri} >= $pri; } return $bin; } # Return selected pnames whose dependencies the other selections do not # satisfy. Indicate full satisfaction by returning the empty list. sub are_selections_consistent { my( $bin, $levels, $sel ) = @_; my $prov = $bin->{''} or die "$0: AllBin fails to refer to AllProv\n"; defined $sel or $sel = $DebSrcBin::select_up_default; map { $bin->{$_}->are_all_deps_satisfied( $prov, $levels, $sel ); } grep { $bin->{$_}{select} >= $sel } sort grep {length} keys %$bin; } 1; debram-2.0.0.4/helper/debparse/README0000644000000000000000000000642410360052602013717 0ustar The DebParse Perl modules, version 0.1.1 By Thaddeus H. Black , 7 January 2006 These modules parse and interrelate the Debian archive's Sources and Packages files, including versioned dependencies, build dependencies, architecture limitations, virtual packages, reverse Enhances, correct sequencing of version numbers, versioned Provides, etc. The modules go far deeper than libparse-debian-packages-perl. This is an alpha release, pursuant to [1]. This alpha release is suitable for use in Debram development and probably elsewhere; but as with all alpha software, you should not be surprised if unexpected trouble arises. The software is little tested beyond the immediate context of Debram development, has not been packaged independently, and lacks proper documentation. Although it might prove desirable to package the software some day, the author lacks concrete plans to do so now. Under such conditions, early users of the software (if any) are bound to be pretty sophisticated Debian users, so while this version is current, the author would appreciate detailed feedback. (Incidentally, it is readily conceded that Perl is not really the right language for such work. This is part of the reason the software is alpha.) You do not need these modules to install, run, use, modify, develop, build, package or distribute Debram. Even if maintaining several branches of the Ramification or ramifying hundreds of packages, you are likely to find these modules of little use. However, if you are so deep into Debram development that you find a need to analyze the overall dependency web of the entire Debian archive, then these modules can really help. If you are reading the source and want to read from the low-level modules to the high, it is recommended to read the source files in the order listed in mod-list.txt. This is what the author would probably do. Alternately, if you prefer to read high to low, read the source files in the reverse order. These modules and all the files distributed with them are free software. If you have received them as part of and/or have derived them from a larger software distribution of the author's (probably debram), then you may regard them simply as part of the larger distribution, licensed accordingly. However, if you have received them separately, if you prefer them to stand independently, or if for some other reason the larger grant does not suit your purpose, then a specific grant for these modules and files follows. Copyright (C) 2005-2006 Thaddeus H. Black This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. 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 with the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL-2. The Free Software Foundation, Inc., can be contacted if desired at 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA [1] http://lists.alioth.debian.org/pipermail/debtags-devel/2005-August/000767.html debram-2.0.0.4/helper/debparse/AllPkg.pm0000644000000000000000000001047110301172023014537 0ustar package AllPkg; use warnings; use strict; use integer; use DebSrcBin; use AllProv; use AllSrc; use AllBin; # Warning threshold: # 100 to disable the stdout progress messages entirely; # 50 for typical use; # 0 for pedantic messages or debugging. our $wth = 50; our %relationship_string = ( 'xPre-Depends' => 'pre-depends on', 'xDepends' => 'depends on', 'xRecommends' => 'recommends', 'xSuggests' => 'suggests', 'renh' => 'is enhanced by', 'xBuild-Depends' => 'build-depends on', 'xBuild-Depends-Indep' => 'build-depends for indep on', 'xConflicts' => 'conflicts against', 'xReplaces' => 'replaces', 'xBuild-Conflicts' => 'build-conflicts against', 'xBuild-Conflicts-Indep'=> 'build-conflicts for indep against', ); # Verbosity: # 60 - Print even trivial pnames. # 50 - Omit trivial pnames. # 30 - Omit all pnames. our $verbosity = 50; # Instantiate and initialize. sub new { # Instantiate. my $class = shift; my( $src_filename, $bin_filename ) = @_; warn "reading files:\n" if $wth <= 70; warn " Sources...\n" if $wth <= 60; my $src = AllSrc->new( $src_filename ); warn " Packages...\n" if $wth <= 60; my $bin = AllBin->new( $bin_filename ); my $self = { src => $src, bin => $bin }; bless $self, $class; # Build out. warn "building the data structures out:\n" if $wth <= 70; warn " referencing build-deps by binary...\n" if $wth <= 50; $bin->add_build_dep( $src ); warn " referring sources to their binaries...\n" if $wth <= 50; $src->refer_to_bin ( $bin ); warn " hashing package provisions...\n" if $wth <= 60; my $prov = AllProv->new( $bin ); $self->{prov} = $prov; warn " reversing package enhancements...\n" if $wth <= 50; $bin->reverse_enhance(); warn "done initializing\n" if $wth <= 65; return $self; } sub check { my( $self, $levels, $sel ) = @_; $self->{bin}->are_selections_consistent( $levels, $sel ); } # Transform error hashes into outputtable error strings. sub errstr { my $self = shift; my $sel = shift; map { # Here is a single error hash, including the pname whose dependency # is not satisfied, the relationship (Recommends, Conflicts, etc) # unsatisfied, and the altern which fails the test. # # The local flags $any_passes and $any_fails refer not to the larger # test outside this local loop, but rather to the $$xpname relevance # test by &AllProv::pnames_provided within the loop. # my $any_passes = 0; my $any_fails = 0; my $pname1 = $_->{pname }; my $altern1 = $_->{altern }; my $relat1 = $_->{relationship}; my $rel_str1 = $relationship_string{$relat1}; my $is_cfl = $AllBin::dep_cfl {$relat1}; my $test_xpname = $is_cfl; my $test_xsel = defined($sel) && $is_cfl; my $line = "$pname1 $rel_str1 " . join( ' | ', map { # Here is a single alternative from the altern. my $xpname = $pname1; my $xsel = $sel ; my $xpname_ref = $test_xpname ? \$xpname : undef; my $xsel_ref = $test_xsel ? \$xsel : undef; my $vname_str = $_->{vname} . ( $_->{ver} ? ( " ($_->{rel} $_->{ver})" ) : '' ) . ( $verbosity >= 40 ? $self->{prov}->pnames_provided_str( $_->{vname}, $_->{rel}, $_->{ver}, $verbosity < 60, $xpname_ref, $xsel_ref ) : '' ); if ( ( !$test_xpname || defined($xpname) ) && ( !$test_xsel || defined($xsel ) ) ) { $any_passes = 1 } else { $any_fails = 1 } $vname_str; } @$altern1 ) . "\n"; !$any_passes && $any_fails ? () : ( $line ); } @_; } # Perform a complete analysis. Return a complete discrepancy report. sub analyze_and_report { my( $self, $levels, $sel ) = @_; $self->errstr( ( defined($sel) ? $sel : $DebSrcBin::select_up_default ), $self->check( $levels, $sel ) ); } sub select_by_pri { my $self = shift; $self->{bin}->select_by_pri( @_ ); } 1; debram-2.0.0.4/helper/update-date0000755000000000000000000000523110377704601013403 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This helper script automatically updates debram's issue date in # several files (the files are named in the following block). The # script accepts date and time in any format the date(1) command # understands, but it writes the date (and time) to each file in that # file's appropriate format. Example usage: # # $ update-date '24 Jan 2005 21:00' # # When also running the helper/update-ver script, you probably want to # run that script first, then this one. Otherwise debian/changelog is # updated in a different manner than you probably thought to update it. # # (Bug: This script, like helper/update-ver, uses far too much memory # when it runs. Because the script is only a development helper, # because few people will ever run the script, because the memory waste # is theoretically inaesthetic but practically probably inconsequential, # there is no plan to fix the bug.) # # my $warn_msg = "$0: cannot find date line in "; my $ind; @ARGV == 1 && ( $ind = `date -ud'$ARGV[0]'`, !$? ) or die "usage: $0 date\n"; my $dtd = `date -ud'$ind' +'%e %B %Y'`; $dtd =~ s/^\s*//; chomp $dtd; my $cld = `date -ud'$ind' -R` ; $cld =~ s/^\s*//; chomp $cld; open DT, '<', $Def::debram_txt; open D1, '<', $Def::debram_1; open DL, '<', $Def::descloc; open CL, '<', $Def::changelog; open RM, '<', $Def::readme; my @dt =
; my @d1 = ; my @dl =
; my @cl = ; my @rm = ; close DT; close D1; close DL; close CL; close RM; my $str_authe = "${Def::author} <${Def::email}>"; my $pat_authe; { my $qm = quotemeta $str_authe; $pat_authe = qr/$qm/; } $dt[8] =~ s/^(Version )(\d+\.\d+\.\d+[a-z]?)(, )(\S(?:.*?\S)??)\s*$/$1$2$3$dtd\n/ or warn "$warn_msg${Def::debram_txt}\n"; $d1[1] =~ s/^( ")([^"]*?)(")/$1$dtd$3/ or warn "$warn_msg${Def::debram_1}\n"; { my $i = 0; ++$i until $i > $#dl || $dl[$i] =~ /^DATA\s*$/; ++$i until $i > $#dl || $dl[$i] =~ /^The issue date is\s*$/; $i += 2; $i <= $#dl && $dl[$i] =~ s/^( )(\S(?:.*?\S)??)\s*$/$1$dtd\n/ or warn "$warn_msg${Def::descloc}\n"; } { my $i = 0; ++$i until $i > $#cl || $cl[$i] =~ s/^( -- $pat_authe )(\S(?:.*?\S)??)\s*$/$1$cld\n/; $i <= $#cl or warn "$warn_msg${Def::changelog}\n"; } { my $i = $#rm; --$i until $i < 0 || $rm[$i] =~ s/^.*\S.*\n/$str_authe, $cld\n/; $i >= 0 or warn "$warn_msg${Def::readme}\n" } open DT, '>', $Def::debram_txt; open D1, '>', $Def::debram_1; open DL, '>', $Def::descloc; open CL, '>', $Def::changelog; open RM, '>', $Def::readme; print DT @dt; print D1 @d1; print DL @dl; print CL @cl; print RM @rm; close DT; close D1; close DL; close CL; close RM; debram-2.0.0.4/helper/list-words-cont0000755000000000000000000000277510474355201014264 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This script scans the Package, Provides and Sources fields of a # Packages file for words containing the words you list on the command # line. # # You probably won't use this script much, but it may prove useful if # you want a full list of words to search for when searching # dependencies. For example, when searching for Perl dependencies, you # might not think to include "perlapi" but to exclude "hyperlatex" in # your search. This script will at least remind you of both words. # # The script scans case-insensitively. It is insensitive to the cases # of the words you supply. our $usage = <1} @o; } @opt; if ( $opt{'?'} || $opt{h} || @arg < 1 ) { print $usage; exit 0; } my %word; my $fn_packages = shift @arg; $_ = quotemeta for @arg; open P, '<', $fn_packages; while (

) { my( $text ) = /^(?:Package|Source|Provides):(.*)$/ or next; for my $word ( $text =~ /\b\w+\b/g ) { for my $w ( @arg ) { $word{$word} = 1 if $word =~ /$w/i; } } } close P; print "$_\n" for sort keys %word; debram-2.0.0.4/helper/count-deps0000755000000000000000000000177110474411057013272 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This script counts and ranks dependencies in one or more Packages # files. our $usage = <1} @o; } @opt; if ( $opt{'?'} || $opt{h} ) { print $usage; exit 0; } my %dep; for my $fn ( @arg ) { open P, '<', $fn; while (

) { my( $text ) = /^(?:Pre-Depends|Depends|Recommends):(.*)$/ or next; $dep{$_}++ for map { length($_) ? $_ : () } split /[\s,|]*\([^()]*\)[\s,|]*|[\s,|]+/, $text; } close P; } printf "%5d %s\n", $dep{$_}, $_ for sort { $dep{$b} <=> $dep{$a} || $a cmp $b } keys %dep; debram-2.0.0.4/helper/selections0000644000000000000000000003150710377734471013370 0ustar # Here is the Debian 3.1r0a sarge binary package selection list the # author used in preparing the most recent Command Selection Guide. If # you want to run the helper/cmdsel-debs script and don't have another # package list to feed it, you can feed it this one. a2ps abook adduser adjtimex afio aget aish alsa-base alsa-utils alsaplayer alsaplayer-alsa alsaplayer-common alsaplayer-daemon alsaplayer-text anacron antiword apg apt apt-doc apt-dpkg-ref apt-file apt-howto-common apt-howto-en apt-move apt-rdepends apt-utils aptitude aptitude-doc-en ascii at athena-jot atlas3-base atlas3-base-dev atlas3-doc atlas3-headers atlas3-sse2 atlas3-sse2-dev autobook autoconf automake1.9 autoproject autotools-dev away base-config base-files base-passwd bash bash-builtins bash-doc bc bfr bibcursed bible-kjv bible-kjv-text bin86 binclock bind9-doc bind9-host bing binstats binutils binutils-doc bison bittornado bittorrent bjam blt bookmarks bsdmainutils bsdutils buffer buici-clock build-essential bzip2 c-cpp-reference ca-certificates ccal cccc cdbs cdda2wav cdrecord cdrtools-doc cdw cdw-common cflow cfortran cgdb chameleon chase chrootuid chrpath circ-tex comerr-dev compartment console-common console-data console-tools coreutils countrycodes cpbk cpio cpp cpp-3.3 cpp-3.3-doc cpp-doc cproto cpuid cramfsprogs cron cstream curl cvsbook d-shlibs daemon dash datefudge db2latex-xsl db2latex-xsl-doc db3-doc db4.2-doc db4.2-util db4.3-doc db4.3-util dbs dbus-1 dbus-1-dev dbus-1-doc dbus-1-utils dbus-glib-1 dbus-glib-1-dev dc ddd ddd-doc debconf debconf-doc debconf-i18n debconf-utils debfoster debhelper debian-goodies debian-history debian-installer-manual debian-keyring debian-policy debian-reference-common debian-reference-en debianutils debmirror debootstrap deborphan debram debram-data debtags debtags-edit defoma defoma-doc dep.pl deroff detachtty developers-reference devscripts dh-make dhelp di dialog dict dict-bouvier dict-easton dict-elements dict-foldoc dict-freedict-deu-eng dict-freedict-eng-deu dict-freedict-eng-fra dict-freedict-eng-lat dict-freedict-eng-spa dict-freedict-fra-eng dict-freedict-lat-eng dict-freedict-spa-eng dict-gazetteer2k dict-gazetteer2k-counties dict-gazetteer2k-places dict-gazetteer2k-zips dict-gcide dict-hitchcock dict-jargon dict-moby-thesaurus dict-vera dict-wn dictd dictfmt dictionaries-common dictzip diff diff-doc diffstat dist diveintopython dlocate dnstracer dnsutils doc-base doc-debian doc-iana doc-linux-html doc-linux-text docbook docbook-defguide docbook-dsssl docbook-dsssl-doc docbook-mathml docbook-utils docbook-xml docbook-xsl docbook2x dog doschk dosfstools dpatch dpkg dpkg-dev dpkg-doc dput dselect dtach dupload dvd+rw-tools e2fslibs e2fsprogs echoping ed eject elfsh emacs21-bin-common emacs21-common emacs21-el emacs21-nox emacsen-common enscript epic4 epic4-help epic4-script-lice epstool esound-clients esound-common exim4 exim4-base exim4-config exim4-daemon-light exim4-doc-html exim4-doc-info fakechroot fakeroot fastdep fbdesk fbpager fdupes fdutils feh fetchmail fftw3 fftw3-dev fftw3-doc file findutils finger flex flex-doc flip fluxbox fmirror fontconfig fontforge fontforge-doc fping freepats fsh ftp ftpgrab g++ g++-3.3 g77 g77-3.3 g77-3.3-doc g77-doc gawk gcal gcc gcc-3.3 gcc-3.3-base gcc-3.3-doc gcc-3.4-base gcc-doc gdb geoip-bin gettext gettext-base gettext-doc giblib1 git glibc-doc gmrun gnu-efi gnupg gnupg-doc gnuplot gnuplot-doc gnuplot-nox gnuplot-x11 gpm gpw grep grep-dctrl groff groff-base grun gs-common gs-esp gsfonts gsfonts-x11 gsl-bin gsl-doc-pdf gsl-ref-html gsl-ref-psdoc gtk-led-askpass guile-1.6 guile-1.6-dev guile-1.6-doc guile-1.6-libs guile-1.6-slib gv gzip h5utils hdf5-tools hexcat hexedit hicolor-icon-theme hnb hostname hotplug html2ps html2text htop httping httrack httrack-doc hwdata iamerican ibritish iftop ifupdown imagemagick imlib-base imlib11 imlib11-dev indent indent-doc info info2man initrd-tools initscripts intel2gas intltool-debian ipfwadm ipgrab iprint iproute iptables iptables-dev iputils-ping iputils-tracepath ircii iso-codes ispell jack-tools jackd jade jadetex jailer jargon-text jigdo-file jigit kernel-image-2.6.8-2-686 kernel-internals-guide kernel-package kernel-source-2.6.8 klogd knl ksymoops lapack3 lapack3-dev lapack3-doc latex-xcolor latex-xft-fonts launchtool lcap lcdf-typetools ldap-utils leave leksbot less lesstif2 lft lftp libacl1 libapr0 libapt-pkg-dev libapt-pkg-doc libapt-pkg-perl libarchive-tar-perl libart-2.0-2 libart-2.0-dev libartsc0 libasound2 libasound2-dev libasound2-doc libatk1.0-0 libatk1.0-data libatk1.0-dev libatk1.0-doc libatm1 libatomic-ops libatomic-ops-dev libattr1 libaudio-dev libaudio2 libaudiofile0 libblkid1 libbz2-1.0 libbz2-dev libc6 libc6-dev libc6-i686 libcap-bin libcap-dev libcap1 libcomerr2 libcompress-zlib-perl libconfig-general-perl libconfig-inifiles-perl libconfigfile-perl libconsole libcsiro0 libcupsimage2 libcupsys2-gnutls10 libcurl3 libcurl3-dev libcurses-perl libcurses-ui-perl libdaemon-dev libdaemon0 libdb1-compat libdb3 libdb3-util libdb4.2 libdb4.3 libdb4.3++ libdb4.3++-dev libdb4.3-dev libdebtags-dev libdebtags0 libdevmapper1.01 libdns16 libdotconf-dev libdotconf1.0 libdps1 libelfg0 libelfg0-dev libelfsh0 libemail-simple-perl libesd-alsa0 libevent-dev libevent1 libexpat1 libexpat1-dev libffi2 libffi2-dev libflac6 libfont-afm-perl libfontconfig1 libfontconfig1-dev libfreetype6 libfreetype6-dev libft-perl libg2c0 libg2c0-dev libgc1 libgcc1 libgcj-common libgcj4 libgcrypt11 libgcrypt11-dev libgcrypt11-doc libgd-tools libgd2-xpm libgd2-xpm-dev libgdbm-dev libgdbm3 libgeoip1 libgimpprint1 libglib1.2 libglib1.2-dev libglib2.0-0 libglib2.0-data libglib2.0-dev libglib2.0-doc libglibmm-2.4-1 libglibmm-2.4-dev libgmime2 libgmime2-dev libgmp3 libgmp3-dev libgmp3-doc libgnet-dev libgnet2.0-0 libgnutls11 libgpg-error-dev libgpg-error0 libgpgme11 libgpgme11-dev libgpmg1 libgsl0 libgsl0-dev libgtk1.2 libgtk1.2-common libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libgtk2.0-dev libgtk2.0-doc libgtkmm-2.4-1 libgtkmm-2.4-dev libgtkmm-2.4-doc libgtop2-2 libguile-ltdl-1 libhdf4g libhdf5-doc libhdf5-serial-1.6.2-0 libhdf5-serial-dev libhid-dev libhid0 libhtml-format-perl libhtml-lint-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttrack1 libi18n-charset-perl libice-dev libice6 libid3tag0 libident libidl0 libidn11 libidn11-dev libimlib2 libimlib2-dev libio-string-perl libio-zlib-perl libiodbc2 libisc7 libisccc0 libisccfg0 libjack0.80.0-0 libjack0.80.0-dev libjasper-1.701-1 libjcode-pm-perl libjconv-bin libjpeg62 libjpeg62-dev libkpathsea3 libkrb53 liblcms1 libldap-2.2-7 libldap2 liblocale-gettext-perl liblockfile-dev liblockfile-simple-perl liblockfile1 liblog-agent-perl libltdl3 libltdl3-dev liblwres1 liblzo-dev liblzo1 libmad0 libmagic1 libmagick6 libmail-sendmail-perl libmailtools-perl libmatheval1 libmatheval1-dev libmcrypt-dev libmcrypt4 libmhash2 libmikmod2 libncurses5 libncurses5-dev libncursesw5 libncursesw5-dev libneon24 libnet-ssh-perl libnet1 libnet1-dev libnetpbm10 libnetpbm10-dev libnewt-dev libnewt0.51 libnfsidmap1 libnss-db libogg0 liboggflac1 liboil0.3 liboil0.3-dev liboop-dev liboop-doc liboop4 libopencdk8 libosp-dev libosp4 libpam-doc libpam-modules libpam-runtime libpam0g libpam0g-dev libpango1.0-0 libpango1.0-common libpango1.0-dev libpango1.0-doc libpaper-utils libpaper1 libparse-debian-packages-perl libpcap0.7 libpcap0.8 libpcap0.8-dev libpcre3 libpcre3-dev libperl5.8 libplplot-c++9 libplplot-dev libplplot9 libpng12-0 libpng12-dev libpopt-dev libpopt0 libpostscript-simple-perl libpth-dev libpth2 libqhull-dev libqhull5 libqthreads-12 libreadline4 libreadline5 libreadline5-dev librecode0 libroman-perl libsasl2 libsasl2-modules libselinux1 libsgmls-perl libsigc++-1.2-5c102 libsigc++-2.0-0 libsigc++-2.0-dev libsigc++-2.0-doc libslp1 libsm-dev libsm6 libsndfile1 libsndfile1-dev libsp1 libsp1-dev libspeex1 libss2 libssl-dev libssl0.9.7 libstdc++2.10-glibc2.2 libstdc++5 libstdc++5-3.3-dev libstdc++5-3.3-doc libstdc++6 libsvn0 libsysfs1 libt1-5 libt1-dev libt1-doc libtagcoll-dev libtagcoll0 libtar libtar-dev libtasn1-0 libtasn1-2 libterm-readkey-perl libterm-readline-gnu-perl libtext-charwidth-perl libtext-format-perl libtext-iconv-perl libtext-wrapi18n-perl libtidy0 libtiff4 libtiff4-dev libtiffxx0 libtimedate-perl libtool libtool-doc libttf2 libunac1 libunac1-dev libungif4-dev libungif4g libunicode-map-perl libunicode-map8-perl libunicode-maputf8-perl libunicode-string-perl liburi-perl libusb++-0.1-4 libusb++-dev libusb-0.1-4 libusb-dev libuu-dev libuuid1 libvorbis0a libvorbisenc2 libvorbisfile3 libwrap0 libwrap0-dev libwww-curl-perl libwww-perl libwww-ssl0 libx11-6 libx11-dev libxaw7 libxcursor-dev libxcursor1 libxext-dev libxext6 libxft-dev libxft1 libxft2 libxi-dev libxi6 libxml++2.6 libxml++2.6-dev libxml++2.6-doc libxml-libxml-common-perl libxml-libxml-perl libxml-namespacesupport-perl libxml-parser-perl libxml-sax-expat-perl libxml-sax-perl libxml2 libxml2-dev libxml2-doc libxml2-utils libxmltok1 libxmltok1-dev libxmu-dev libxmu6 libxmuu-dev libxmuu1 libxp-dev libxp6 libxpm-dev libxpm4 libxrandr-dev libxrandr2 libxrender-dev libxrender1 libxslt1 libxslt1-dev libxslt1.1 libxt-dev libxt6 libxtrap-dev libxtrap6 libxtst-dev libxtst6 libxv-dev libxv1 libyaml-perl lilo lilo-doc lilypond lilypond-data lilypond-doc limo linda lintian linux-kernel-headers linuxinfo liwc loadwatch locales lockfile-progs login logrotate lpr lshw lshw-common lslk lsmbox lsof lsscsi lynx lzop m4 m4-doc mailx maint-guide make make-doc makedev makejail makeself man-db man2html manpages manpages-dev mawk mboxgrep mbr mconfig mcrypt members memstat menu mime-support mimedecode mirrordir miscfiles mkisofs mmv module-init-tools modutils most mount mozilla-firefox mpack mpage mtools mtr-tiny multitee mutt muttprint muttprint-manual nano nas nas-doc nasm ncftp2 ncurses-base ncurses-bin ncurses-term net-tools netbase netcat netkit-inetd netpbm netpipe-tcp netpipes netselect netselect-apt newbiedoc nfs-common nut-nutrition nvi octave octave-epstk octave2.1 octave2.1-doc octave2.1-headers octave2.1-htmldoc octave2.1-info openclipart-png openjade1.3 opensched opensp openssl packit pal par parchive passwd patch patchutils pbuilder pcal pciutils pcregrep pdftk perl perl-base perl-doc perl-modules perl-tk perlmagick pgf pidentd pinentry-curses pinentry-doc pkg-config pktstat plplot-bin plplot-doc plplot9-driver-gd pm-dev pmidi png-definitive-guide pngmeta po-debconf popularity-contest portmap poster prelink procmail procps prosper protoize psfontmgr pslib-dev pslib1 psmisc pstack pstotext psutils puf pv pwgen python python-apt python-cxx python-cxx-dev python-dev python-doc python-egenix-mxdatetime python-egenix-mxtexttools python-egenix-mxtools python-examples python-gdbm python-gnuplot python-imaging python-imaging-doc python-imaging-doc-html python-imaging-doc-pdf python-imaging-tk python-mpz python-newt python-numarray python-numarray-doc python-numeric python-numeric-tutorial python-stats python-tk python2.3 python2.3-cxx python2.3-cxx-dev python2.3-dev python2.3-doc python2.3-egenix-mxdatetime python2.3-egenix-mxtexttools python2.3-egenix-mxtools python2.3-examples python2.3-gdbm python2.3-iconvcodec python2.3-imaging python2.3-imaging-tk python2.3-mpz python2.3-numarray python2.3-numeric python2.3-subversion python2.3-tk qhull-bin quick-reference-en quilt randomize-lines ras rcs rdate realpath recode refblas3 refblas3-dev refblas3-doc remind render-dev reportbug rhyme rig rng-tools rolldice rotix rsync rubber safecat sc schedutils screen scrot sdd sed sendip sg3-utils sgml-base sgml-base-doc sgml-data sgmls-doc sgmlspl sgrep sharutils sharutils-doc since sipcalc slang1 slang1-utf8-dev slang1a-utf8 slay sleepenh slib slmon smake snarf sng snownews sp spell splitvt ssh stl-manual strace subversion subversion-tools sudo sunclock sunclock-maps sux svn-buildpackage symlinks sysadmin-guide sysklogd sysstat systune sysv-rc sysv-rc-conf sysvbanner sysvinit t1lib-bin t1lib1 t1utils tagcoll tagcolledit talk tar tardy tcl8.4 tcl8.4-doc tcpd tcpdump tcpflow tcpreen tcptrace tcputils tcsh telnet template-new tetex-base tetex-bin tetex-doc tetex-extra texi2html texinfo tidy tidy-doc time timeout timidity tk8.4 tk8.4-doc traceroute tree ttf-bitstream-vera ttf-freefont ttf-isabella ttf-opensymbol ttf-thryomanes ttf2pt1 type1inst ucf ucspi-unix unaccent unifdef units units-filter unrtf untex unzip urlview usbutils userinfo util-linux uudeview uuid-dev vera vim vim-common vim-doc vlock vrfy w3-dtd-mathml w3c-dtd-xhtml w3m wamerican wbritish wdg-html-reference wdg-html-validator wdiff wdiff-doc weblint-perl weex wget whiptail whois wordnet wordnet-base wput x-dev x-ttcidfont-conf x-window-system-core xaw3dg xbase-clients xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xfree86-common xlibmesa-dri xlibmesa-gl xlibmesa-glu xlibs xlibs-data xlibs-dev xlibs-static-dev xloadimage xml-core xpdf xpdf-common xpdf-reader xpdf-utils xplanet xplanet-images xprint xprint-common xserver-common xserver-xfree86 xsltproc xspecs xtail xterm xtoolwait xutils zip zlib1g zlib1g-dev bind9 grub grub-doc quota slapd talkd debram-2.0.0.4/helper/buff-expand0000755000000000000000000000626610360057253013412 0ustar #! /usr/bin/perl # This Perl script buffs (removes trailing blanks from) and/or expands # (converts tabs to spaces in) the files named on the command line. It # also ensures that each file (if not empty) ends in a proper "\n". use warnings; use strict; use integer; our $tab = 8; our $pat_makefile_name = qr/Makefile|rules/; our $usage = <; close FILE; my $has_acted = 0; my @buff_expanded = buff_expand $is_makefile, $has_acted, @line; if ( $stdout ) { print @buff_expanded; } elsif ( $has_acted ) { open FILE, '>', $file or warn( "$0: cannot write $file\n" ), next; print FILE @buff_expanded; close FILE; } } } else { my @line = <>; my $has_acted = 0; print buff_expand 0, $has_acted, @line; } debram-2.0.0.4/helper/check-ram-titles0000755000000000000000000001711510371160000014325 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This helper script ensures that ram titles are consistent and correct # throughout debram.txt, that the titles are indented and ordered # correctly, and that the cross-references are sane. # # usage: check-ram-titles [-ch] { debram.txt } # # If no debram.txt filename is supplied, the script examines the main # debram.txt file in the expected place relative to the script. The -c # option yields a ram count. # # our $usage = <) ($p2))?\s*$/o; } my $shortbar_pat; my $longbar_pat ; { my $w1 = $Def::width_shortbar ; my $w2 = $Def::width_shortbar + 1; $shortbar_pat = qr /^-{$w1}$/o; $longbar_pat = qr /^-{$w2}/o ; } # Read command-line arguments and options. my @opt; my @arg; push @{ /^-\S/ ? \@opt : \@arg }, $_ for @ARGV; my %opt = map { my $o = $_; map { substr( $o, $_, 1 ) => 1 } 1 .. length($o)-1 } @opt; if ( $opt{'?'} || $opt{h} || @arg > 1 ) { print $usage; exit 0; } my $debram; $debram = shift @arg if @arg; $debram = $opt{s} ? $Def::cmdsel_txt : $Def::debram_txt unless defined $debram; my @r1; # head titles my @r2; # body titles my @r3; # tail titles my $pat_count = $opt{s} ? qr// : qr/ \(\d+\)/; sub ramlvl ($) { $Def::ndig - @{ [ $_[0] =~ /0/g ] } } # Parse a title line from head or tail. sub parse ($@) { # Are these main-body title lines? my $isbody = shift; # Divide each line into fields. my @line; for ( @_ ) { my( $ram, $sp, $title, $xrefs, $ramlvl, $uctitle, @xref ); if ( $isbody ) { ( $ram, $title ) = /^(\d{${Def::ndig}}) (\S(?:.*?\S)??)${pat_count}\s*$/o or die "$0: parse: badly formed title line in the main body\n$_\n"; } else { my $arrow; ( $ram, $sp, $title, $arrow, $xrefs ) = /$linepat/o or die "$0: parse: badly formed ToC/xref line\n$_\n"; if ( defined $arrow ) { length($ram) + length($sp) + length($title) + length($arrow) + 2 == $Def::pos_arrowhead or die "$0: parse: arrow too short or too long\n$_\n"; } defined( $xrefs ) or $xrefs = ''; @xref = split ' ', $xrefs; } $ramlvl = ramlvl $ram; length( $title ) <= $Def::maxlen_title or die "$0: parse: title too long\n$_\n"; $uctitle = uc $title; if ( $isbody ) { $uctitle eq $title or die "$0: parse: lower-case char in title\n$_\n"; } else { my $ramlvl1 = $ramlvl + ( $opt{s} && $ramlvl > 1 ? -1 : 0 ); length( $sp ) == $Def::ind_shift * ($ramlvl1-1) or die "$0: parse: bad indent in\n$_\n"; } push @line, { isbody => $isbody, ram => $ram, ramlvl => $ramlvl, title => $title, uctitle => $uctitle, xref => \@xref, }; } # Mark each line as endram or parent ram. Check ram ordering. for my $i ( 0 .. $#line-1 ) { $line[$i+1]{ram} gt $line[$i]{ram} or die "$0: parse: misordered rams near $line[$i]{ram}\n"; $line[$i]{endram} = $isbody || $line[$i+1]{ramlvl} <= $line[$i]{ramlvl}; } $line[-1]{endram} = 1 if @line; # Hash the rams. my %ram = map { $_->{ram} => $_ } @line; # Guard against stray or unsorted cross-references. for my $ram ( keys %ram ) { my $ram1 = $ram{$ram}; my $parent = $ram; $parent =~ s/^(.*)[^0]/${1}0/; my $ram_prev; my $n_match_prev = $Def::ndig; for my $xref ( @{ $ram1->{xref} } ) { $ram{$xref} or die "$0: parse: xref to unknown ram $xref\n"; $xref eq $parent and die "$0: parse: xref to ${ram}'s immediate parent\n"; my $errmsg = "$0: parse: misordered xrefs from $ram\n"; my $j = 0; # count of matching digits. ++$j while $j < $Def::ndig && substr( $ram, $j, 1 ) eq substr( $xref, $j, 1 ); $j < $Def::ndig && $j <= $n_match_prev or die $errmsg; if ( $j < $n_match_prev ) { $n_match_prev = $j; $ram_prev = $xref; next; } defined( $ram_prev ) && $ram_prev ge $xref and die $errmsg; $ram_prev = $xref; } } return %ram; } # Read the title lines in from each of debram.txt's three sections: # head; body; tail. open F, '<', $debram; 1 while !eof(F) && ne ( $opt{s} ? $Def::mark_commands : $Def::mark_toc ); unless ( $opt{s} ) { ; ; } { my $wasblank = 0; while ( !eof(F) ) { local $_ = ; if ( my( $ram ) = /^(\d{${Def::ndig}})/o ) { push @r1, $_; if ( $opt{s} ) { my $ramlvl = ramlvl $ram; ( $ramlvl <= 1 && $wasblank == 1 ) || ( $ramlvl > 1 && $wasblank == 0 ) or die "$0: blank line is wrong above ram $ram in the Contents\n"; $wasblank = 0; } } elsif ( $opt{s} ) { if ( !/\S/ ) { ++$wasblank } elsif ( /^\*{${Def::ndig}} \S/ ) { $wasblank = 0 } else { last } $wasblank <= 1 or die "$0: the Contents have a double blank line\n"; } else { last } } } 1 while !eof(F) && ne ( $opt{s} ? $Def::mark_commands : $Def::mark_main_body ); { my $intitle = 0; while ( !eof(F) ) { local $_ = ; $intitle = !$intitle, next if /$longbar_pat/o; next unless $intitle; if ( /^\d{${Def::ndig}}/o ) { push @r2, $_ } elsif ( !( $opt{s} && /\S/ ) ) { last } } } unless ( $opt{s} ) { for ( 1, 2 ) { 1 while !eof(F) && =~ /\S/ } { while ( !eof(F) ) { local $_ = ; if ( /^\d{${Def::ndig}}/o ) { push @r3, $_ } else { last } } } } !eof(F) or die "$0: the file is missing some parts or is not even a " . ( $opt{s} ? 'cmdsel.txt' : 'debram.txt' ) . "\n"; close F; # Parse the three sections: my %r1 = parse 0, @r1; my %r2 = parse 1, @r2; my %r3 = parse 0, @r3; # Ensure that the rams in each section are the same, with the same # titles, and that no title is duplicated. for my $r ( $opt{s} ? ( [ \%r1 ] ) : ( [ \%r1, \%r3 ], [ \%r3, \%r1 ] ) ) { my( $ra, $rb ) = @$r; for my $ram ( sort keys %$ra ) { my $ram1 = $ra->{$ram}; my $title = $ram1->{title}; my $uctitle = $ram1->{uctitle}; my $endram = $ram1->{endram}; ( !defined($rb) || ( $rb->{$ram} && $title eq $rb->{$ram}{title} ) ) && ( !$endram || ( $r2{$ram} && $uctitle eq $r2{$ram}{title} ) ) or die "$0: title mismatch, ram $ram\n"; } } for my $ram ( sort keys %r2 ) { my $ram1 = $r2{$ram}; my $title = $ram1->{title}; ( $r1{$ram} && $r1{$ram}{endram} && $title eq $r1{$ram}{uctitle} ) && ( $opt{s} || ( $r3{$ram} && $r3{$ram}{endram} && $title eq $r3{$ram}{uctitle} ) ) or die "$0: title mismatch, ram $ram\n"; } { my %uctitle = (); for my $ram ( keys %r1 ) { my $uctitle = $r1{$ram}{uctitle}; exists $uctitle{$uctitle} and die "$0: duplicate title\n$uctitle\n"; $uctitle{$uctitle} = $ram; } } # Check that no ram lacks a parent. for my $ram ( keys %r1 ) { my $parent = $ram; $parent =~ s/^(0*[1-9]\d*)([1-9])(0*)/${1}0${3}/; $r1{$parent} or die "$0: ram $ram lacks a parent $parent\n"; } # Print ram counts if -c. if ( $opt{c} ) { my $n_end = 0; my $n_parent = 0; ++( $_->{endram} ? $n_end : $n_parent ) for values %r1; printf "%${Def::ndig_ram_count}d end rams\n" . "%${Def::ndig_ram_count}d parent rams\n" . "%${Def::ndig_ram_count}d total rams\n", $n_end, $n_parent, $n_end + $n_parent; } debram-2.0.0.4/helper/template-opts0000755000000000000000000000171710474347770014021 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This script doesn't do anything but take options and arguments from # the command line, so it's not very useful to run it. However, if you # are writing a new Perl helper script, this makes a pretty good # template to start it with. our $usage = <1} @o; } @opt; if ( $opt{'?'} || $opt{h} ) { print $usage; exit 0; } # List the options and arguments. print "Options : "; print "[$_] " for sort keys %opt; print "\n"; print "Arguments: "; print "[$_] " for @arg; print "\n"; debram-2.0.0.4/helper/sort-maint0000755000000000000000000000174410336136674013314 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; use Alpha; # This helper script sorts and checks the maint.txt file. It acts as a # filter, accepting the old maint.txt on stdin, printing the new # maint.txt on stdout. my $pat_mnstd = qr/^.{1,${Def::n_init}} .{1,${Def::n_last}}$/; $/ = ''; my %mnlong; # long-form maintainer names my %mnstd ; # debram-standard short-form maintainer names while ( <> ) { my @c = grep { /\S/ } split '\n'; my $mnstd = shift @c; $mnstd =~ $pat_mnstd or die "$0: bad std maint name $mnstd\n"; $mnstd{$mnstd} and die "$0: std maint name $mnstd given twice\n"; for ( @c ) { defined $mnlong{$_} and die "$0: long maint name $_ given twice\n"; $mnlong{$_} = $mnstd; } $mnstd{$mnstd} = [ sort @c ]; } <>; for my $mnstd ( sort { Alpha::cmp_std_mn $a, $b } keys %mnstd ) { print "$mnstd\n"; print "$_\n" for @{ $mnstd{$mnstd} }; print "\n"; } debram-2.0.0.4/helper/buffe-src0000755000000000000000000000060210334711713013052 0ustar #! /bin/bash -e # (See the notes in `./buff-expand'.) # # This script is successfully called from the main source directory as # `helper/buffe-src'. It buffs and expands all the source files, except # that it only buffs the two Makefiles `Makefile' and `debian/rules'. BUFFE='helper/buff-expand -M' for F in `find .` ; do if [ -f $F ] ; then $BUFFE $F echo $F fi done debram-2.0.0.4/helper/test/0000755000000000000000000000000010360463647012242 5ustar debram-2.0.0.4/helper/test/dpkggs0000644000000000000000000000052010357760704013441 0ustar foo install pkg01 install pkg02 install pkg03 install pkg51 install tree install debram-2.0.0.4/helper/test/etc/0000755000000000000000000000000010357737401013013 5ustar debram-2.0.0.4/helper/test/etc/alternatives/0000755000000000000000000000000010543530211015477 5ustar debram-2.0.0.4/helper/test/etc/alternatives/cmdalt0000777000000000000000000000000010764712460024256 2../../usr/share/man/man1/cmd02.1.gzustar debram-2.0.0.4/helper/test/usr/0000755000000000000000000000000010357737230013051 5ustar debram-2.0.0.4/helper/test/usr/share/0000755000000000000000000000000010357737235014160 5ustar debram-2.0.0.4/helper/test/usr/share/man/0000755000000000000000000000000010360026732014716 5ustar debram-2.0.0.4/helper/test/usr/share/man/man8/0000755000000000000000000000000010357737447015603 5ustar debram-2.0.0.4/helper/test/usr/share/man/man8/adm51.8.gz0000644000000000000000000000000010357737447017210 0ustar debram-2.0.0.4/helper/test/usr/share/man/man3/0000755000000000000000000000000010360461337015560 5ustar debram-2.0.0.4/helper/test/usr/share/man/man3/fnc31.3.gz0000644000000000000000000000000010360027016017153 0ustar debram-2.0.0.4/helper/test/usr/share/man/man3/fncstray.3.gz0000644000000000000000000000000010360461337020102 0ustar debram-2.0.0.4/helper/test/usr/share/man/man1/0000755000000000000000000000000010543530211015545 5ustar debram-2.0.0.4/helper/test/usr/share/man/man1/cmdstray19.1.gz0000644000000000000000000000000010360463145020244 0ustar debram-2.0.0.4/helper/test/usr/share/man/man1/cmd03.1.gz0000777000000000000000000000000010764712460024705 2../../../../etc/alternatives/cmdaltustar debram-2.0.0.4/helper/test/usr/share/man/man1/cmd01.1.gz0000644000000000000000000000000010357737425017163 0ustar debram-2.0.0.4/helper/test/usr/share/man/man1/cmd02.1.gz0000644000000000000000000000000010357737431017161 0ustar debram-2.0.0.4/helper/test/usr/share/man/man1/cmdstray.1.gz0000644000000000000000000000000010360460621020066 0ustar debram-2.0.0.4/helper/test/usr/share/man/man1/foo.1.gz0000644000000000000000000000000010357745370017040 0ustar debram-2.0.0.4/helper/test/usr/X11R6/0000755000000000000000000000000010357737241013634 5ustar debram-2.0.0.4/helper/test/usr/X11R6/man/0000755000000000000000000000000010357737250014407 5ustar debram-2.0.0.4/helper/test/usr/X11R6/man/man1/0000755000000000000000000000000010357737250015243 5ustar debram-2.0.0.4/helper/test/manpath0000644000000000000000000000007110357745310013607 0ustar test/usr/local/man:test/usr/share/man:test/usr/X11R6/man debram-2.0.0.4/helper/test/Contents0000644000000000000000000000102110360027012013732 0ustar Here is some Contents header. FILE LOCATION usr/share/man/man1/foo.1.gz admin/foo usr/share/man/man1/cmd01.1.gz secta/pkg01 usr/share/man/man1/cmd02.1.gz secta/pkg01,sectb/pkg08 usr/share/man/man1/cmd03.1.gz -> usr/share/man/man3/fnc31.3.gz secta/pkg01 usr/share/man/man8/adm51.8.gz sectd/pkg51 debram-2.0.0.4/helper/test/debram.txt0000644000000000000000000001163710360463647014245 0ustar ==================================================================================================================================== DEBIAN RAMIFICATION ==================================================================================================================================== Thaddeus H. Black Version TEST ------------------------------------------------------------------------------------------------------------------------------------ RAMIFICATION MAP AND TABLE OF CONTENTS ------------------------------------------------------------------------------------------------------------------------------------ 1000 User-oriented Packages 1100 General Commands 1110 File Commands 1111 General File Commands 1112 File Listing and Finding 1113 Symbolic Linking 1114 Directories 1115 File Moving, Copying and Naming 1117 Misc File Commands Cross-reference (See Also) Document History Copyleft ------------------------------------------------------------------------------------------------------------------------------------ THE RAMIFICATION ------------------------------------------------------------------------------------------------------------------------------------ 1111 GENERAL FILE COMMANDS (2) ------------------------------------------------------------------------------------------------------------------------------------ TH Black ········ opt · pkg01 ······················ test pkg01 TH Black ········ opt · pkg02 ······················ test pkg02 ------------------------------------------------------------------------------------------------------------------------------------ 1112 FILE LISTING AND FINDING (1) ------------------------------------------------------------------------------------------------------------------------------------ F. Ernst ········ opt · tree ······················· displays directory tree, in color ------------------------------------------------------------------------------------------------------------------------------------ 1113 SYMBOLIC LINKING (2) ------------------------------------------------------------------------------------------------------------------------------------ TH Black ········ opt · pkg03 ······················ test pkg03 TH Black ········ opt · pkg51 ······················ test pkg51 ------------------------------------------------------------------------------------------------------------------------------------ 1114 DIRECTORIES (1) ------------------------------------------------------------------------------------------------------------------------------------ JR Van Zandt ···· opt · mirrordir ·················· duplicate a directory by making a minimal set of changes ------------------------------------------------------------------------------------------------------------------------------------ 1115 FILE MOVING, COPYING AND NAMING (0) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ 1117 MISC FILE COMMANDS (2) ------------------------------------------------------------------------------------------------------------------------------------ TH Black ········ std · foo ························ ancient Greeks called them barbarians because their speech seemed "bar bar bar" TH Black ········ opt · pkg08 ······················ test pkg08 ------------------------------------------------------------------------------------------------------------------------------------ CROSS-REFERENCE (SEE ALSO) ------------------------------------------------------------------------------------------------------------------------------------ Sometimes the Debian package you want resides in a branch other than the one in which you are looking. When so, seek also in the branches cross-referenced here. 1000 User-oriented Packages 1100 General Commands 1110 File Commands 1111 General File Commands 1112 File Listing and Finding 1113 Symbolic Linking -------------------------------------> 1114 1115 1114 Directories ------------------------------------------> 1113 1115 File Moving, Copying and Naming ----------------------> 1112 1117 Misc File Commands ------------------------------------------------------------------------------------------------------------------------------------ DOCUMENT HISTORY This is a test debram.txt only. Note that changes to this file or to anything else in the helper/test hierarchy will not usually be recorded in the changelog. COPYLEFT Copyright (C) 2002-2005 Thaddeus H. Black. This test file is licensed to you under the same terms as is the rest of the Debram package. (What alternate use you might put this otherwise useless test file to is hard to fathom, but, hey, that's your business, isn't it? This is free software.) debram-2.0.0.4/helper/test/whatis0000644000000000000000000000057610360463317013466 0ustar cmd01 (1) - do the first thing cmd02 (1) - do the second thing cmd03 (1) - do the second thing hidden (1) - do the second thing foo (1) - bar fnc31 (3) - call this library function adm51 (8) - administer it cmdstray (1) - here is a stray actual manpage cmdstray19 (1) - do the second thing debram-2.0.0.4/helper/test/README0000644000000000000000000000065710360020260013106 0ustar The helper/test hierarchy contains simple test data of various kinds for the Debram developer's convenience in programming and testing. It's just to give the programmer some small test data to try certain Debram programs and helper scripts on. Other than that, there is absolutely nothing interesting here. You can ignore helper/test. If you find yourself using helper/test for some reason, feel free to add to it as needed. debram-2.0.0.4/helper/PerlPythonNotes0000644000000000000000000006040710376441505014326 0ustar Debram emphasizes compiled over interpreted software. The difference in emphasis is seen most clearly with respect to software written in Perl, but it is seen to a lesser degree too with respect to software written in Python and other languages. Although the purpose of the emphasis is to enhance Debram's usefulness to its target audience as explained below, the emphasis has the side effect of implying---intentionally or unintentionally---that some free software is better than others. Few, of course, would dispute the abstract principle that some free software is indeed better than others (more useful, more efficient, more reliable, more wisely designed, pleasanter to run, easier to customize, better documented, etc). Software can be outclassed without dishonor to its developer. Nor will users always agree among themselves as to which software outclasses which. While Debram's primary purpose is to ramify not to rate software, it is neither practical nor desirable to ramify all software with equal prominence. If it is felt that `sudo' is more important than `lockvc', `make' more important than `fortune-mod', `coreutils' more important than `m4-doc', then the ramification should and does reflect this. Such reflection necessarily involves judgment. What is unfortunate is that even necessary, useful, respectful judgment can offend good people who have a stake in the thing judged. Because the people in question here are my friends and fellow Debian Developers, the matter matters a lot to me. Since I do not know how to design a useful Debian ramification which judges nothing, a decent respect for the opinion of my Debian colleagues demands that I explain at least why Debram judges the way it does. This document explains. Read, and see if you don't agree. THE BASIC DILEMMA As observed, Debram's principal purpose is to ramify or classify software according to function or area of interest. Nevertheless, an inherent tension arises between the need to ramify Debian's archive sufficiently finely that a given branch is not too large, and the need not to ramify the archive into such a large number of branches that a user cannot even find the branch he wants. Now it is true: some large branches yet lack subramification only because my own time, knowledge and/or interest are limited, and because no other appropriate person has yet stepped forward to do the work: [7880 CJK (Chinese/Japanese/Korean)] is a good example of this effect. Imprecisely but more generally, however, the parts of the ramification where the more important packages reside are the ones which tend to be ramified more finely. Thus the `tree' package resides (at the time of this writing) in [1112 File Listing and Finding] with only three other packages, while `bochs-sdl' crowds into [9620 SDL] with sixty-one others. The premise: the user's time is limited and Debram probably serves him better by making him first aware of the existence of `tree'. Hence the principle: the more important kinds of packages get smaller branches. This is not to claim that every package in a small branch is equally important. Far from it. For one thing, I as ramifier am not an expert in all areas of the Debian archive; unless you have taken the trouble to inform me, sometimes I do not know which packages are important. For another, one does not subdivide an already adequately small branch just because it contains one or two particularly important packages. But broadly the principle holds: the more important kinds of packages do tend to get smaller branches. Branches are kept small in two ways: promotion and subramification. Subramification---the division of a large branch into two or more smaller branches---is best where a branch has many packages of roughly similar importance, where a natural fault divides the packages into roughly equal groups. Promotion---the separation of a few prominent packages from the general body---applies in other cases and takes many forms. Both subramification and promotion involve judgment, of course; but only the latter immediately elevates some packages above others. Now, some might argue that Debram should not be in the business of elevating packages; but I would respond that elements of the Debian Project have long been in the business of elevating some packages above others: witness the "standard" and "optional" package priorities. Nowhere is it written that only Debian's FTP-master should render such editorial judgment. The trouble with the "optional" priority is not that it differentiates, but rather that it includes most of the archive and hence does not differentiate well enough. Consider: Would Debram serve its users better if it hid the fact that Apache is more significant than most of the other web servers, that Bind is more significant than most of the other name servers, that Linux is more significant than most of the other kernels? Would Debram serve its users better if it denied the historically rooted importance of Groff and Vi? Although it is Debram's duty (with perhaps a handful of exceptions) to treat every Debian package with dignity, it is not and cannot be Debram's task to make all packages equal. The dilemma arises not in the principle that packages are unequal, but in the practical fact that some fallible person---I, in this case---must render decisions thereto, decisions with which not everyone will agree. Now of course, not everyone need agree. I am not some powerful FTP-master; I am a very ordinary Debian Developer who ramifies packages to help interested Debian users to find the software they need. When a maintainer objects to a decision I make, I hope that he discusses the matter with me, but in the final analysis I have no power to prevent anyone who dislikes Debram from simply ignoring the thing. Personally, I think that Debram is neat. I think that you should use it. Maybe you agree. If you have some comments, or even better a patch, I'd like to hear from you. THE BIG FIVE PROGRAMMING LANGUAGES In the free-software world, it may be said that the big five programming languages are C, C++, Shell (Bourne or Bash), Python and Perl---with Assembly possibly added to the list as a sixth, depending on your point of view. Other popular languages there are, of course, and much good free software is developed in them: Fortran 77, Objective C, Tcl/Tk, OCaml, Haskell, Octave, Common Lisp, Elisp, Scheme, Guile, Java, Lua, PHP, Ruby, Ada and others. However, if one had to draw up a list of the chief languages at the present time, the list could hardly differ much from the big five named here. Of the big five, Debram treats software written in Python and especially in Perl somewhat differently from the others. For this, some explanation is in order. Perl presents the clearer case and happens to be the more familiar personally to me, so let us speak of Perl first. PERL From the Perl manpages: Perl is a high-level ... general-purpose programming language ... intended to be practical ... rather than beautiful... Perl is frequently ... an interpreted language... And referring my words here and other expressions like them, [Perl's originator Larry Wall] doesn't really care [whether one calls it] a Perl program or a Perl script... Now that "script" and "scripting" are terms that have been seized by unscrupulous or unknowing marketeers for their own nefarious purposes, they have begun to take on strange and often pejorative meanings, like "non serious" or "not real programming". Consequently, some Perl programmers prefer to avoid them altogether. One can hardly blame the creators of Perl for promoting their own programming language, but who are the "marketeers" here, eh? Ramifying Debian software not promoting Perl is my task, and although it is possible to write almost any program in Perl, a broad gulf yawns between the attitude with which one typically approaches programming in Perl and the one with which one approaches programming in C++. Perl cannot be all things to all people. The words "script" and "scripting" have always connoted "non-serious" and "not real programming" in some sense---this is nothing new---but the words are not pejorative until applied to a programmer trying to use a scripting language for serious purposes for which the language is fundamentally ill suited. The whole point of Perl is to support the "non-serious" programmer who does not want to do "real programming" at the moment. If not for this, then what need was there for Perl in the first place? We already had adequate programming languages for the serious jobs. And there is the rub. The creators of Perl and their good battalions on CPAN believe fundamentally in the Perl way and have devoted tens of thousands of hours to adding to Perl the features needed to make it a real, serious programming language. Their tenacity is commendable. However, the fact that the Perl people have set improbably lofty goals for their "practical rather than beautiful" language, the fact that they have been busy as beavers working toward these goals, may command our respect; but it cannot require you and me to agree that they have succeeded. My view is that they have not succeeded, and furthermore that the kind of success they seek is probably unattainable. The old Perl camel just isn't that kind of beast. PERL AND STROUSTRUP'S "TWO RELATED PURPOSES" As Bjarne Stroustrup wrote in his non-free book *The C++ Programming Language* (special ed, 2000), A programming language serves two related purposes: it provides a vehicle for the programmer to specify actions to be executed, and it provides a set of concepts for the programmer to use when thinking about what can be done... The connection between the language in which we think/program and the problems and solutions we can imagine is very close. If Stroustrup is right, then how does Perl serve the "two related purposes?" With respect to providing a vehicle for the programmer to specify actions to be executed, consider that there is no clear distinction in Perl between the integer 0, the floating-point 0.0, the string "0", the character '0', and the logical value *false*. This is by design. However, in Perl "00" *is* something different: it is logically *true* and increments magically not to 1 but to "01". Perl evinces such semantically quirky behavior in many ways. Another example is that open FILE, $file; behaves differently if $file is "foo" or "!foo" than if ">foo". (Who would name a file "!foo" or ">foo"? Probably no one, but that isn't the point. In the old Perl ethic, though, that is indeed the point. This is where the Perl people and I disagree.) Modern Perl does provide you ways to work around most of the semantical quirks---for example, you can code $x += 0; open FILE, '<', $file; to ensure that the value of $x is "0" not "00" and that the file is opened properly for reading not writing---but such worked-around Perl is awkward at best: it defeats Perl's own natural-linguistic strengths, while scattering random-looking symbols, terms, arguments and statements about the code whose only purpose is to persuade Perl not to behave illogically. With respect to providing a set of concepts for the programmer to use when thinking about what can be done, Perl has made at least two important contributions. The first is in the unnamed $_ "it" variable, which C++ admittedly lacks. The second is in the Perl-compatible regular expression (PCRE), which one can now access from any language via Libpcre but which is still most conveniently available in Perl. In general, however, Perl's focus is on human linguistics rather than on computational concepts---which is brilliant when it works (usually in short scripts) but which leads the programmer to do silly things when it doesn't. As Stroustrup observes, A [programming] language is said to *support* a style of programming if it provides facilities that make it convenient (reasonably easy, safe, and efficient) to use that style. A language does not support a technique if it takes exceptional effort or skill to write such programs: it merely *enables* the technique to be used. Stroustrup was talking primarily about Fortran 77 and C, but his comments apply equally well to Perl. One can indeed write tight, efficient, well organized, logical, reliable code in Perl with sufficient effort. But is it "reasonably easy, safe, and efficient" to do so? Or to is it more like eating soup with a fork? PERL AND STROUSTRUP'S CRITERIA Stroustrup continues: One language is not necessarily better than another because it possesses a feature the other does not. There are many examples to the contrary. The important issue is not so much what features a language possesses, but that the features it does possess are sufficient to support the desired programming styles in the desired application areas: [1] All features must be cleanly and elegantly integrated into the language. [2] It must be possible to use features in combination to achieve solutions that would otherwise require extra, separate features. [3] There should be as few spurious and "special-purpose" features as possible. [4] A feature's implementation should not impose significant overheads on programs that do not require it. [5] A [programmer] should need to know only about the subset of the language explicitly used to write a program. Of these five criteria, Perl generally satisfies the fifth and trivially the second. The third, the language explicitly rejects. The first is a hopeless case for Perl if you are doing much of anything other than text processing. Regarding the fourth, the interpreter's internal algorithms do seem to be pretty efficient, but whatever overhead they do impose, the programmer is stuck with. C++ and Python equal or beat Perl on all five points. These are not deficiencies of Perl. On the contrary. None of the big five programming languages beats Perl at what Perl best: quick, one-man, one-off text processing scripts. One might add to Stroustrup's list that [6] Features supporting the most common programming tasks---text, list, hash and file processing---should be cleanly and elegantly integrated into the language. [7] The language should make it as easy as possible for the programmer to code simple, practical jobs. [8] The grammar and syntax of the language should deeply resemble natural language where possible. (Whether this last point is actually a virtue is a matter for another discussion, but to Perl programmers it is a virtue, so for purpose of the present discussion we shall treat it as such.) Perl wins on these points. Notice, however, how the focus of the points has changed. The first four of Stroustrup's original five points mostly regard the disciplined creation of solid, well built software. By contrast, the three Perl points I have added mostly regard the immediate personal convenience of the lone programmer. There is nothing wrong with conveniencing the programmer; but if solid, well built software for public distribution is what we seek, then it is Stroustrup's five points that we primarily should attend to. DATA TYPES AND DEBUGGABLITY Although debuggability is a partial or implicit aim of several of the eight criteria, it is not the explicit target of any of them. The importance of debuggability in a programming language is hard to overstate, so one might further add to the criteria that [9] The language must be inherently neat. It must deeply integrate and conveniently make available facilites for the programmer to discipline himself and his code---facilities which, when applied, permit the compiler to warn the programmer swiftly and accurately of as many bugs as possible. Strict data typing is a typical example of such a facility. If this is indeed a goal, then it is a goal the old Perl camel stampedes away from not toward. Yet have facilities not been grafted onto Perl to ameliorate the problem? Yes, they have, many times, often by heroic efforts. Many efforts have been made to tame the camel. But such facilities and efforts, although helpful indeed to the Perl programmer, nevertheless cut against Perl's basic nature. As Stroustrup writes, Over the basic type system of a language, only Pyrrhic victories are possible. PERL AND DEBRAM Now, none of this would be at issue if Perl did not enjoy loyal battalions of good-natured, enthusiastic supporters who believe strongly in Perl's destiny as a top-tier, world-class general-purpose programming language. If programming languages were eating utensils, then I happen to think that Perl is a fork, and if they agreed with me that Perl is a fork, then we would all agree that Perl is the best fork around and we would not be having this discussion. The problem from my point of view is that Perl's promoters feel that Perl is a pretty good spoon, too. I respect their point of view, but having personally written more lines of code in Perl in my life than in any other programming language, I disagree. To me, Perl's spoon is like the little spoon you flip out of a Swiss army knife: better than nothing in a pinch, but hardly a substitute for a real spoon when you are sitting in your kitchen and have a bowl of soup to eat. So if Perl is no spoon, then what are we to make of the observation that one can compile Perl scripts? Answer: the observation may be technically correct---the existence of a working Perl compiler may be a significant achievement in itself---but to introduce the fact in the present context fundamentally distorts the point. Compiling a script directly into machine code (or byte code, or whatever), with special supporting libraries, doesn't make it less of a script; it just makes the script unreadable and a little faster. Anyone who has written serious programs in C or C++ knows the difference. Still, a fair bit of significant software is indeed written in Perl, and although I admittedly have my doubts, it is not for me to say that Perl was or was not the right language for the developers to choose for a given software project. However, if you want to spin off some little betaware prototype fast, none of the big five suits the need quite like Perl. Browse through [3681 General Perl Software] in the ramification and you'll see what I mean. While there is undoubtedly some good software in there, there is also a lot of subpar betaware---and in any case it is hard to escape the prejudice, or at least the predisposition, that Perl is for prototyping and that if the software were really serious, it would have been rewritten in C++ or the like. Put another way, some programmers go to a lot of trouble to rewrite in C++ software originally prototyped in a scripting language like Perl. This, they do for a reason. Software thus rewritten merits a presumption of extra distinction. For these reasons, Debram's presumption is in favor of a program written in a strongly typed, logically coherent, normally machine-code compiled language like C++. Where Perl software does an important job for which no comparable C/C++ software is available or where it has significant, long-established stature, and where I am aware of the fact, Debram does ramify the Perl software in the main ramification normally, according to its function rather than to its implementation language. In some branches of the ramification like [1360 XML/SGML], [1444 R Statistics], [1752 MySQL] and [8672 Apache], where a strong Perl tradition exists, the relevant Perl modules and software are indeed included. In the interest of keeping the rest of the ramification uncluttered, however, most other Perl software is kept together under [3680 Perl Software]. PYTHON AND OTHER PROGRAMMING LANGUAGES Turning from Perl to Python, the case for Python is rather different. Python is a different kind of language, to which most of the objections above do not apply. However, partly because Python is interpreted, partly for consistency with the Perl policy, partly because one suspects that really serious Python software is sometimes reimplemented in C++ anyway, partly because the practice saves scarce Debram development hours, much Python software nevertheless remains ramified under [3590 Other Python Software]. A similar policy applies to the other interpreted languages. However, there is much less free software written in most of those. With regard to the occasional software package written in Ada or some other alternate compiled language, Debram generally takes an agnostic view, ramifying it normally as though it were written in C or C++. CONCLUDING REMARKS Some will agree with Debram's stance on Perl and Perl software and some will undoubtedly disagree. Careful inspectors of Debram's source will notice that several of Debram's own development helper scripts are written in Perl---and since I was the one who wrote those scripts, it clearly cannot be that I think that Perl is all bad. However, it is also true that I retain some doubts about Perl's suitability for real programming, and that my own long experience coding in Perl has deepened rather than mollified such doubts. Some say that the language a program is written in is a mere implementation detail, but I don't believe it. If undisciplined programming languages didn't lead to undisciplined programs, then how could we explain the success of C++ and Python? Indeed, how could we explain the existence and broad use of Perl's own "use strict" pragma? As the native speaker of Greek or French would agree, language discipline counts. More than this, though, it is the experience of wading through the Debian archive, package by package, which has impressed me of the general difference in character between scripted software and compiled software---particularly between software scripted in Perl and software compiled from C or C++. As in the case of Cdebconf, really serious Perl scripts tend eventually to be reimplemented into the more serious programming languages. For this, there is a reason. My intent in writing this document has not been so much to convert Perl enthusiasts to my point of view. (For one thing, I *am* a Perl enthusiast. Only, my enthusiasm for Perl attenuates rapidly outside Perl's proper application domain.) My intent in writing these words has been to try to explain to Perl enthusiasts who disagree with me why I have made the ramification design decisions I have made, in the hopes that even if these people do not wholly agree, they will nevertheless understand, appreciate and respect Debram's point of view in the matter. Debram's Python policy, of course, I have not really explained here. In fact I admit that I have not put nearly so much thought into the matter, in part because I personally have limited experience coding in Python. Debram policy-wise, Python is sort of "along for the ride" with Perl: the present Python policy is not so much by thoughtful design as it is by mere analogy. Scripts are usually relatively slow. That is about as far as my Python analysis has gone. (In actual ramification practice, I would observe that for some reason Python software does not usually seem to pose quite the same dilemma Perl software does. Is this because Python programmers are more likely voluntarily to have recoded important software when appropriate in C++? I can't really say. There is the fact that some Python developers proudly name their own programs "pyfoo" or "pybar". If they view their software's Pythonity as a special mark of distinction, then it is hardly for me to question the view! Maybe it really is a special mark. Python is a fine language.) One last remark. Although I believe Debram's Perl policy to be the right one generally, I also acknowledge that it does not suit all Perl programs equally. If you maintain a specific Perl, Python or other scripted package which you feel has established first-tier stature and deserves to be ramified out in the main ramification, let me know. I am not some secret judge wearing a black hood in a hidden chamber; I am just some guy trying to make sense of the vast heap of packages which constitutes the Debian archive. If Debram misramifies your package---Perl package or otherwise---contact me: we would see what we couldn't do about moving it. Thank you for maintaining all that great free software. -------------------------------------------------------- Thaddeus H. Black, 9 January 2006 debram-2.0.0.4/helper/ramify-whatis0000755000000000000000000003741110412026716013771 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # %ignsct: omit ("ignore") some warnings for these man sections, and do # not output man pages belonging to them our %ignsct = map {$_=>1} qw( 2 3 ); our $indent = ' ' x 5; our $file_debram = $Def::debram_txt; our $test = 0; # set to 1 to run on test data only our $usage = <= 2 && ( $ARGV[0] eq '-t' ) ) { my( $opt, $file ) = splice @ARGV, 0, 2; if ( $opt eq '-t' ) { $file_debram = $file } } my @opt; my @arg; push @{ /^-\S/ ? \@opt : \@arg }, $_ for @ARGV; my %opt = map { my $o = $_; map { substr( $o, $_, 1 ) => 1 } 1 .. length($o)-1 } @opt; if ( @arg < 1 || $opt{'?'} || $opt{h} ) { print $usage; exit 0; } my $f_cont = shift @arg; !defined($f_cont) || @arg and die $usage; my $pwd = `pwd`; chomp $pwd; my $pat_pwd = quotemeta $pwd; sub readlink1 ($) { local $_ = shift; my $link = `readlink -f $_`; chomp $link; $link =~ s/^$pat_pwd\/// or die "$0: test link is from outside the present working directory\n" if $test; return $link; } sub vwarn { warn @_ if $opt{v} } our $bar = '-' x $Def::width_fmt . "\n"; my $w_maint_pri = $Def::w_maint + $Def::w_pri; # ---------------------------------------------------------------------- # Read in. my %whatis ; # desc ->> whatis my %whatis2; # sect & cmd ->> whatis vwarn "${bar}reading whatis...\n"; { for ( $test ? `cat test/whatis` : `whatis -w '*'` ) { my( $cmd, $sect, $sext, $desc ); { my $pat; { my $p1 = qr/(\S+)\s+\((\d)([^()]*)\)/; my $p2 = qr/\s(?:.*?\s)??-\s+/ ; my $p3 = qr/((?:\S(?:.*\S)?)?)/ ; $pat = qr/^${p1}${p2}${p3}\s*$/o; } ( $cmd, $sect, $sext, $desc ) = /$pat/o; } unless ( defined $cmd ) { /\s\((\d)([^()]*)\)\s/ && $ignsct{$1} or vwarn( "cannot parse whatis\n$_\n" ); next; } my %whatis1 = ( fultxt => $_ , cmd => $cmd , sect => $sect, sext => $sext, desc => $desc, ); push @{ $whatis {$desc} }, \%whatis1; push @{ $whatis2{$sect}{$cmd} }, \%whatis1; } for my $desc ( keys %whatis ) { my @whatis = sort { $a->{sect} <=> $b->{sect} or $a->{cmd } cmp $b->{cmd } or $a->{sext} cmp $b->{sext} or $a->{desc} cmp $b->{desc} } @{ $whatis{$desc} }; $whatis{$desc} = \@whatis; } } vwarn "${bar}reading the manpath...\n"; my @manpath = grep { chomp; !/\blocal\b/ } split ':', ( $test ? `cat test/manpath` : `manpath` ); my $pat_manpath; { my $p0 = join '|', map { quotemeta } @manpath; $pat_manpath = qr/$p0/; } my %manpg; # sect & cmd -> actual manpage vwarn "${bar}reading actual manpage filenames...\n"; { my @manpg0 = `find @manpath -type f -mindepth 2 -maxdepth 2`; my @manpgl0 = `find @manpath -type l -mindepth 2 -maxdepth 2`; my %kill; for my $ctl ( { list => \@manpg0 , islink => '' }, { list => \@manpgl0, islink => '1' }, ) { for ( @{ $ctl->{list} } ) { chomp; my( $cmd, $sect, $sext ); { local $_ = $_; s/\.gz$//; ( $cmd, $sect, $sext ) = /^(?:\S*\/)?([^\/\s]+)\.(\d)([^\/.\s]*?)$/ or vwarn( $ctl->{islink} ? "cannot parse actual manpage linkname $_\n" : "cannot parse actual regular manpage filename $_\n" ), next; } my $level = 20 * !length($sext) + 10 * ( !$ctl->{islink} + 1 ); my %manpg1 = ( path => $_ , cmd => $cmd , sect => $sect , sext => $sext , level => $level, ); if ( $ctl->{islink} ) { my $realf = readlink1 $_; unless ( $realf =~ /\S/ ) { $ignsct{$sect} or vwarn "cannot follow the real symlink " . "$_ to its target\n"; next; } $manpg1{realf} = $realf; } my $dont_record = ''; if ( my $existing = $manpg{$sect}{$cmd} ) { if ( $manpg1{level} > $existing->{level} ) { delete $kill{$sect}{$cmd} } elsif ( $manpg1{level} < $existing->{level} ) { $dont_record = 1 } else { $kill{$sect}{$cmd} = 1 } $ignsct{$sect} or vwarn "two $cmd ($sect) manpages exist\n"; } $manpg{$sect}{$cmd} = \%manpg1 unless $dont_record; } } for my $sect ( keys %kill ) { delete $manpg{$sect}{$_} for keys %{ $kill{$sect} }; } } my %inv_mp; # path (file/link, not realfile) -> sect & cmd vwarn "${bar}inverting the manpage hash...\n"; for my $sect ( keys %manpg ) { for my $cmd ( keys %{ $manpg{$sect} } ) { my $file = $manpg{$sect}{$cmd}{path}; exists $inv_mp{$file} and die "$0: impossible: two actual manpage files with the same path\n"; $inv_mp{$file} = { sect => $sect, cmd => $cmd , }; } } my %dpkggs; # pkg -> (dummy 1) vwarn "${bar}reading dpkg --get-selections...\n"; { for ( $test ? `cat test/dpkggs` : `dpkg --get-selections` ) { my( $pkg ) = /^(\S+)/; if ( defined $pkg ) { $dpkggs{$pkg} = 1; } else { vwarn "do not understand from dpkg --get-selections\n$_\n"; } } } my %contp; # file (cont) ->> pkg my %contq; # link (cont) ->> pkg my %contf; # pkg ->> file (cont) my %contl; # pkg ->> link (cont) vwarn "${bar}reading the Contents file...\n"; { my %realf; # link -> file my $isbody = !$opt{j}; CONTENTS: for ( $f_cont =~ /\.gz$/ ? `zcat $f_cont` : `cat $f_cont` ) { if ( !$isbody ) { $isbody = '1' if /^FILE\s+LOCATION\s*$/; } else { if ( $test ) { s/^/test\// } else { s/^/\// } /^$pat_manpath\/man\d\//o or next CONTENTS; my( $file, $loc ) = /^(\S(?:.*?\S)??)\s+(\S+?)\s*$/ or vwarn( "cannot parse Contents entry\n$_\n" ), next CONTENTS; my @loc = grep { $_ eq '->' or $dpkggs{$_} } map { my $ret; if ( /^.*\/([^\/\s]+)$/ ) { $ret = $1 } elsif ( $_ eq '->' ) { $ret = $_ } elsif ( /[,\s]/ || !/\S/ ) { vwarn "cannot parse Contents location $_\n"; next CONTENTS; } else { $ret = $_ } $ret; } split ',', $loc; for my $loc ( @loc ) { if ( $loc eq '->' ) { if ( -l $file ) { my $realf = readlink1 $file; if ( $realf =~ /\S/ ) { $realf{$file} = $realf } else { vwarn "cannot follow the symlink from $file\n"; } } } else { $contp{$file}{$loc} = 1; $contf{$loc}{$file} = 1; } } } } my %realf_loc; # link ->> pkg for my $link ( keys %realf ) { my $realf = $realf{$link}; if ( $contp{$realf} ) { $realf_loc{$link}{$_} = 1 for keys %{ $contp{$realf} }; } else { vwarn "can find no package for symlink $link\n"; } } for my $link ( keys %realf_loc ) { my $file = $realf{$link}; my @loc = keys %{ $realf_loc{$link} }; for ( @loc ) { $contp{$file}{$_} = 1; $contf{$_}{$file} = 1; $contq{$link}{$_} = 1; $contl{$_}{$link} = 1; } } } my %contpq; # file/link (cont) ->> pkg my %contfl; # pkg ->> file/link (cont) vwarn "${bar}in Contents, " . "combining the symlinks with the real files...\n"; for my $hash ( \%contp , \%contq ) { for my $file ( keys %$hash ) { for my $pkg ( keys %{ $hash->{$file} } ) { $contpq{$file}{$pkg} = $hash->{$file}{$pkg}; } } } for my $hash ( \%contf , \%contl ) { for my $pkg ( keys %$hash ) { for my $file ( keys %{ $hash->{$pkg } } ) { $contfl{$pkg}{$file} = $hash->{$pkg}{$file}; } } } vwarn "${bar}have done reading\n"; # ---------------------------------------------------------------------- # Process. # Give the manpage files each their several whatis descriptions. vwarn "${bar}assigning the manpage files each their " . "several whatis descriptions...\n"; for my $sect ( keys %manpg ) { $manpg{$sect}{$_}{desc} = [] for keys %{ $manpg{$sect} }; } for my $desc ( keys %whatis ) { my $whatis = $whatis{$desc}; for my $whatis1 ( @$whatis ) { my $sect = $whatis1->{sect}; my $cmd = $whatis1->{cmd }; $manpg{$sect}{$cmd} or $ignsct{$sect} or vwarn "cannot associate with a manpage file the whatis\n" . "$whatis1->{fultxt}\n"; $manpg{$sect}{$cmd} and push @{ $manpg{$sect}{$cmd}{desc} }, $desc; } } for my $sect ( keys %manpg ) { for my $cmd ( keys %{ $manpg{$sect} } ) { my @desc = sort @{ $manpg{$sect}{$cmd}{desc} }; $manpg{$sect}{$cmd}{desc} = \@desc; } } # Object if any actual manpage file/link is not in the Contents. $contpq{$_} or vwarn "actual manpage file/link $_ is not in the Contents\n" for keys %inv_mp; # Subroutine: given a binary package name, return all the corresponding # actual manpage files/links and descriptions (except those in ignored # man sections). sub files_descs ($) { my( $pkg ) = @_; my @file0 = grep { $inv_mp{$_} } sort keys %{ $contfl{$pkg} }; my @file = grep { !$ignsct{ $_->{sect} } } map { my $sect = $inv_mp{$_}{sect}; my $cmd = $inv_mp{$_}{cmd }; $manpg{$sect}{$cmd}{found} = 1; { path => $_ , sect => $sect, cmd => $cmd , desc => $manpg{$sect}{$cmd}{desc}, }; } @file0; return \@file; } # Subroutine: given a binary package name, return all the corresponding # whatis fulltexts. sub fultxts ($) { my( $pkg ) = @_; my @fultxt; for my $fd ( @{ files_descs $pkg } ) { for my $desc ( @{ $fd->{desc} } ) { for ( @{ $whatis{$desc} } ) { push @fultxt, $_->{fultxt}; $_->{found} = 1; } } } return @fultxt; } # ---------------------------------------------------------------------- # Write out. open T, '<', $file_debram; my $is_full_debram_txt; # Subroutines: get and unget debram.txt lines. my @ungotline; sub getline ( ) { @ungotline ? shift(@ungotline) : scalar() } sub ungetline (@) { unshift @ungotline, @_ } sub geteof ( ) { !@ungotline && eof(T) } { # Determine if the debram.txt seems a complete one or only a body. # If a complete one, then discard the topmatter. { my @line = ( getline(), getline() ); if ( $line[0] eq '-' x $Def::width . "\n" && $line[1] =~ /^\d{${Def::ndig}} \S/ ) { $is_full_debram_txt = '' ; ungetline @line; } else { $is_full_debram_txt = '1'; 1 until getline() eq $Def::mark_main_body; getline(); } } my $state = 1; # $state == 0 means that an ordinary debram package entry is expected # next. Other states indicate that the script is in the midst of # reading a ram header. my $printsave; while ( !geteof() ) { local $_ = getline(); if ( $state == 0 ) { if ( !/\S/ ) { print; ++$state; } else { # Here is an ordinary debram package entry. my( $pkg ) = /^.{$w_maint_pri}(\S+)/ or die "$0: cannot parse debram.txt package entry\n$_\n"; next unless $dpkggs{$pkg}; print; { my %already; print map { s/^/${indent}/; $_; } grep { my $ret = $already{$_} ? '' : '1'; $already{$_} = 1; $ret; } fultxts($pkg); } print "\n"; } } elsif ( $state == 1 ) { $printsave = $_; ++$state; } elsif ( $state == 2 ) { last unless /^\d{${Def::ndig}} \S/; print $printsave, $_; ++$state; } elsif ( $state == 3 ) { print; $state = 0; } else { die "$0: impossible" } } } close T; # ---------------------------------------------------------------------- # Warn of and/or report on strays. vwarn "${bar}Finding strays...\n"; { if ( $opt{s} ) { my $wbar = '-' x $Def::width . "\n"; print "${wbar}STRAY COMMANDS\n${wbar}"; } for my $desc ( keys %whatis ) { for ( @{ $whatis{$desc} } ) { unless ( $ignsct{ $_->{sect} } || $_->{found} ) { vwarn "stray whatis entry\n$_->{fultxt}\n"; print "${indent}$_->{fultxt}"; } } } for my $sect ( sort keys %manpg ) { for my $cmd ( sort keys %{ $manpg{$sect} } ) { my $manpg1 = $manpg{$sect}{$cmd}; my $sect = $manpg1->{sect}; my $cmd = $manpg1->{cmd }; my $path = $manpg1->{path}; unless ( $ignsct{$sect} || $manpg1->{found} ) { vwarn "stray actual manpage file/link $path\n"; # (The following does not seem to work, so it is commented out.) # if ( $opt{s} ) { # my $found = ''; # $_->{found} and $found = '1' for @{ $whatis2{$cmd}{$sect} }; # print "${indent}$cmd ($sect)\n" unless $found; # } } } } if ( $opt{s} ) { print "\n\n"; } } debram-2.0.0.4/helper/new-debram-body0000755000000000000000000003764310504461561014173 0ustar #! /usr/bin/perl # This script's documentation stands below. Scroll down. use warnings; use strict; use integer; use bytes; use FindBin; use lib $FindBin::RealBin; use Def; use Bnm; use Alpha; our $file_maint = $Def::maint_txt; our $file_debram = $Def::debram_txt; our $usage = < # Architecture: all # Version: 0.13.2 # Depends: apt (>= 0.3.10) # Filename: pool/main/a/apt-zip/apt-zip_0.13.2_all.deb # Size: 14752 # MD5sum: 78b979ac3ea325e1a2d4b154f14f5eb4 # Description: Update a non-networked computer using apt and removable media # These scripts simplify the process of using dselect and apt on a # non-networked Debian box, using removable media like ZIP floppies. # One generates a `fetch' script (supporting backends such as wget and # lftp, in a modular, extensible way) to be run on a host with better # connectivity, check space constraints of your removable media, and # then install the package on your Debian box. # . # Note on current version: space-checking is not done and spanning # multiple disks is not yet supported. # # You probably have a Packages file on your system at # # /var/lib/dpkg/available # # At the time of this writing (Jan. 2004, revised July 2006), the # various current Packages files are found in Debian's on-line archive # in places like # # dists/testing/main/binary-i386/Packages.gz # # When multiple Packages files are given, the leftmost takes precedence. # # THE RAMIFICATION SPECIAL CONTROL FIELD # # You may find it useful to edit a copy of the Packages file to include # the special control field `Ramification:' in some or all of the binary # control paragraphs. This is no standard control field, of course, but # the script understands it to identify a package's ramification. For # example, # # Ramification: 8212 # Package: apt-zip # Priority: extra # Section: admin # Installed-Size: 104 # Maintainer: Giacomo Catenazzi # Architecture: all # Version: 0.13.2 # Depends: apt (>= 0.3.10) # Filename: pool/main/a/apt-zip/apt-zip_0.13.2_all.deb # Size: 14752 # MD5sum: 78b979ac3ea325e1a2d4b154f14f5eb4 # Description: Update a non-networked computer using apt and removable media # These scripts simplify the process of using dselect and apt on a # non-networked Debian box, using removable media like ZIP floppies. # One generates a `fetch' script (supporting backends such as wget and # lftp, in a modular, extensible way) to be run on a host with better # connectivity, check space constraints of your removable media, and # then install the package on your Debian box. # . # Note on current version: space-checking is not done and spanning # multiple disks is not yet supported. # # Extra text may follow the ram number. If so, the script ignores the # extra text. For example, # # Ramification: 8212 APT # # has the same effect as does # # Ramification: 8212 # # When no Ramification control field is given, the script uses the # ramification number from the old debram.txt. # # The script's -P option can help you to generate an initial # Ramification-identifying copy of the Packages file. # # PACKAGE SORTING ORDER # # To group related packages together, this script sorts packages in a # peculiar order: # # 1. by maintainer's name; then # 2. by source package name; then # 3. by binary package name with the source's flagship binary first. # # Maintainers are sorted last name first. Refer to `Alpha.pm' for the # precise name-sorting algorithm. # # Package names are sorted first without a leading "lib". This means # that "libncurses5" sorts near "ncurses-bin". (It also means that # "libtool" sorts near "tool", which is wrong. In almost every other # case, though, it is right to sort without the leading "lib"; so this # is how the sort is done.) # # Experience shows such a sort to be surprisingly useful. # # PACKAGES NOT OUTPUT # # Packages not named in the Packages files are not output, even when # they appear in the old debram.txt. Packages whose ramifications # cannot be determined are output only when the -P option has been # given. Contrib packages are output only when the -c option has been # given. (As to non-free packages, their control paragraphs do not # occur in the standard Packages files. If non-free are fed to the # script nevertheless, the script's output is undefined.) # # THE UNKNOWN-MAINTAINER ERROR # # This script often exits with an "unknown maintainer" error. Usually # this error is no sign of trouble; it usually merely means that the # script has seen a new Debian maintainer mentioned somewhere in a # Packages file, a maintainer not yet in maint.txt. Sometimes it means # that the script has found a new spelling of an existing maintainer's # name. In either case, the error is usually simple to fix. # # If you are developing the debram, when you see an "unknown maintainer" # error, # # 1. examine the Packages files to decide whether the unknown # maintainer is really a new maintainer or is an existing # maintainer with an alternate spelling. # # 2. update `maint.txt' accordingly, and # # 3. run this script again. # # Although it is not necessary that `maint.txt' always be kept in # perfect alphabetical order, after making several updates to it you # probably want to `helper/sort-maint' it for neatness' and correctness' # sake. # # FILES # # (See the global parameters at this script's head. The files include # debram.txt and maint.txt.) # # BUGS # # This script uses a lot of memory at runtime: it stores a data # structure duplicating piecewise almost the Packages files' entire # combined text. This is convenient for the script writer but is # technically unnecessary. With additional scripting effort, the memory # usage could be dramatically reduced. # # The -t and -m options should be respected even when they do not appear # first on the command line. # # On the other hand, this is just a helper script. To make such # improvements therefore has low priority. # # # The general iconv(3) function does more than is wanted here, so a # limited local iconv function is provided. It converts utf-8 # characters directly to Latin-1, except that utf-8 characters not # present in Latin-1 are converted to $utf8_unk (probably '?'). sub iconv ($) { local $_ = shift; my $out = ''; my( $c1, $c2, $c3, $c4 ); while ( ( $c1, $c2, $c3, $c4 ) = /^([\000-\177]*)([^\000-\177])([\200-\277]*)(.*)/s ) { if ( length($c3) == 1 && ( $c2 eq "\302" || $c2 eq "\303" ) && ( $c3 ge "\200" && $c3 le "\277" ) ) { $c2 = chr( 0100*(ord($c2)-0302) + ord($c3) ); } else { $c2 = $Def::utf8_unk } $c3 = ''; $out .= "$c1$c2$c3"; $_ = "$c4"; } $_ = $out . $_; return $_; } # Read command-line arguments and options. while ( @ARGV >= 2 && ( $ARGV[0] eq '-t' || $ARGV[0] eq '-m' ) ) { my( $opt, $file ) = splice @ARGV, 0, 2; if ( $opt eq '-t' ) { $file_debram = $file } elsif ( $opt eq '-m' ) { $file_maint = $file } } my @opt; my @arg; push @{ /^-\S/ ? \@opt : \@arg }, $_ for @ARGV; my %opt = map { my $o = $_; map { substr( $o, $_, 1 ) => 1 } 1 .. length($o)-1 } @opt; if ( @arg < 1 || $opt{'?'} || $opt{h} ) { print $usage; exit 0; } # Read the maintainer names. my %mnstd; # debram-standard maintainer names my %maint; # full maintainer names { open F, '<', $file_maint; local $/ = ''; while ( ) { my @m = grep { /\S/ } split "\n"; my $ms = shift @m; $mnstd{$ms} and die "$0: std name $ms appears twice\n"; $mnstd{$ms} = 1; for ( @m ) { defined $maint{$_} and die "$0: full maint name $_ appears twice\n"; $maint{$_} = $ms; }; } close F; } # Read the available packages from the Packages files. my %deb; # Debian packages my $after_dash = 0; my %maint_unk; for my $file_avail ( @arg ) { $file_avail eq '-' and $after_dash = 1, next; open F, '<', $file_avail; local $/ = ''; FILE_LOOP: while ( ) { { my $psect = qr/(?:${Def::contrib}\/|.*\/${Def::contrib}$)/om; next FILE_LOOP if !$opt{c} && /^${Def::Section}:[ \t]+$psect/om; } my( $ram ) = /^${Def::Ramification}:[ \t]+(\d{4})/om; my $mnt0; ( $mnt0 ) = /^${Def::Maintainer}:[ \t]+([^<>]+?)[ \t]+ $maint, pri => $pri , src => $src , lead => $lead , # is this a flagship package? desc => $desc , ram => $ram , control => $_ , old => 0 , # had this package been ramified # in the old debram.txt? reramified => 0 , # had this package been ramified under a different ramno # in the old debram.txt? }; } close F; } if ( keys %maint_unk ) { warn "$0: unknown maintainer(s):\n\n"; warn "$_\n" . iconv($_) . "\n\n" for keys %maint_unk; exit 1; } # Read the section titles. Record package ramifications not already # known. my %title; # ram titles my @head = (); # debram.txt head my @tail = (); # debram.txt tail { open F, '<', $file_debram; while ( ) { push @head, $_; last if $_ eq $Def::mark_main_body; } push @head, scalar ; local $/ = ''; while ( ) { s/\n?\z/\n/s; my @c0 = /.*\n/g; my @c = grep { /\S/ } @c0; chomp @c; shift @c; my( $ram, $title ) = shift( @c ) =~ /^(\d{${Def::ndig}}) (.+?) \(\d+\)$/o or do { push @tail, @c0; last; }; defined $title{$ram} and die "$0: ram $ram is titled twice\n"; $title{$ram} = $title; shift @c; for ( @c ) { my( $deb ) = /^.{$skip_to_deb}(\S+)/o or die "$0: badly formed old debram line\n$_\n"; $deb{$deb} or next; if ( defined $deb{$deb}{ram} ) { $deb{$deb}{reramified} = 1 if $ram ne $deb{$deb}{ram}; } else { $deb{$deb}{ram} = $ram; } $deb{$deb}{old} = 1; } } push @tail, ; close F; } # Sort the packages in two ways: by ramification then # maintainer (%debram); by maintainer (@pkg). my @pkg = sort { Alpha::cmp_std_mn ( $deb{$a}{maint}, $deb{$b}{maint} ) || Bnm::cmp_prefixless ( $deb{$a}{src }, $deb{$b}{src } ) || $deb{$b}{lead} <=> $deb{$a}{lead} || Bnm::cmp_prefixless ( $a , $b ) } keys %deb; my %debram = map { $_ => [] } keys %title; for my $deb ( @pkg ) { my $ram = $deb{$deb}{ram}; defined( $ram ) or next; $debram{$ram} or die "$0: unknown ram $ram\n"; push @{ $debram{$ram} }, $deb; } # Subroutine: fill a field with dots. sub dot ($$) { my( $c, $w ) = @_; $c .= ' '; if ( length( $c ) < $w - 1 ) { $c .= "\267" x ( $w - length( $c ) - 1 ) } if ( length( $c ) < $w ) { $c .= ' ' } return $c; } # Subroutine: output one line describing a single deb. sub debout (;$) { local $_ = @_ ? $_[0] : $_; my $out; $out .= dot $deb{$_}{maint}, $Def::w_maint; $out .= dot $deb{$_}{pri }, $Def::w_pri ; $out .= dot $_ , $Def::w_deb ; $out .= $deb{$_}{desc } ; $out =~ s/^(.{0,${Def::width}}).*$/$1/o; print "$out\n"; } # Output the reformed ramification. unless ( $opt{P} ) { print @head if $opt{T}; for my $ram ( sort keys %debram ) { print $rule; print "$ram $title{$ram} (" . scalar( @{ $debram{$ram} } ) . ")\n"; print $rule; if ( $opt{w} || $opt{W} ) { my @old; my @new; push @{ $deb{$_}{old} && !$deb{$_}{reramified} ? \@old : \@new }, $_ for @{ $debram{$ram} }; if ( !$opt{W} ) { debout for @old; print $rule; } debout for @new; } else { debout for @{ $debram{$ram} } } print "\n"; } print @tail if $opt{T}; } # Output a working Packages file. else { for ( @pkg ) { $opt{W} && $deb{$_}{old} && !$deb{$_}{reramified} and next; my $control = $deb{$_}{control}; $control =~ s/^${Def::Ramification}:[ \t]+.*\n?//omg; print "${Def::Ramification}: " . "$deb{$_}{ram} $title{ $deb{$_}{ram} }\n" if defined $deb{$_}{ram}; print $control; } } debram-2.0.0.4/helper/find-cmdsel-dupes0000755000000000000000000000422010377404405014505 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; use Cmdsel; # This helper script reports repeated entries in cmdsel.txt, whether the # repetition is in the command's name and section or in its description. # If the user names no cmdsel.txt file, the script examines the # main debram.txt file in the expected place relative to the script. # # The script warns you if it notices a command out of its proper # ram/man section. It warns you and dies if a line is too long or is # badly formatted. # # In addition to reporting repeats, the script also returns counts of # command lines and commands (the difference being that a few command # lines contain two or more commands, separated by commas) and branches. our $n_dig_stat = 5; our $usage = < 1 } 1 .. length($o)-1 } @opt; if ( $opt{'?'} || $opt{h} || @arg > 1 ) { print $usage; exit 0; } my $cmdsel = @arg ? shift(@arg) : $Def::cmdsel_txt; die $usage if @arg; # Read in and process. open F, '<', $cmdsel; my $parse = Cmdsel::parse ; close F; my %line; my %cmd ; my %desc; for my $ram ( keys %$parse ) { my $ram1 = $parse->{$ram}; my $x = $ram1->{x}; for my $cmd ( keys %$x ) { my $cmd1 = $x->{$cmd}; ++$cmd { $cmd1->{sect} }{$cmd}; ++$desc{ $cmd1->{desc} } unless $line{ $cmd1->{line} }; ++$line{ $cmd1->{line} }; } } { print "\nRepeated Commands:\n"; print "$_\n" for map { my $s = $_ ; my $cs = $cmd{$s}; map { "$_ ($s)" } grep { $cs->{$_} > 1 } sort keys %$cs; } sort keys %cmd; print "\nRepeated Descriptions:\n"; print "$_\n" for grep { $desc{$_} > 1 } sort keys %desc; printf "\nCommand line count: %${n_dig_stat}d", scalar keys %line ; { my $n; $n += scalar( keys %{ $cmd{$_} } ) for keys %cmd; printf "\nCommand count : %${n_dig_stat}d", $n; } printf "\nBranch count : %${n_dig_stat}d", scalar keys %$parse; print "\n\n"; } debram-2.0.0.4/helper/Def.pm0000644000000000000000000000465510377702650012327 0ustar package Def; use warnings; use strict; use integer; use FindBin; # This file defines common parameters for some of the helper scripts. our $top = "${FindBin::RealBin}/.."; our $out = 'debram'; our $author = 'Thaddeus H. Black'; our $email = 'thb@debian.org'; our $dist = 'experimental'; our $urgency = 'low'; our $def_h = "$top/src/def.h"; our $debram_txt = "$top/docdata/$out.txt"; our $maint_txt = "$top/docdata/maint.txt"; our $cmdsel_txt = "$top/docdata/cmdsel.txt"; our $debram_1 = "$top/docdata/$out.1"; our $changelog = "$top/debian/changelog"; our $descloc = "$top/helper/DescLoc"; our $readme = "$top/README"; our $ndig = 4; # digits in a ramno our $maxlen_title = 52; # max length of a ram title our $width = 132; # intended wide screen width our $width_std = 80; # intended standard screen width our $width_fmt = 72; # std paragraph-wrapping width our $width_shortbar = 16; # width of the short bar in cmdsel.txt our $w_maint = 18; # width of the std maint name and sep our $w_pri = 6; # width of the pri and sep our $w_deb = 29; # width of the deb name and sep # # (push if >= $w_deb-2) our $w_whatis = 21; # whatis cmd/sect width, # # to right before the hyphen our $ind_shift = 2; # indentation shift our $pos_arrowhead = 66; # proper xref arrowhead column our $ndig_ram_count = 3; # digits in ram count our $ndig_pkg_count = 5; # digits in package count our $n_init = 2; # maint initials our $n_last = 12; # chars in maint surname our $mark_main_body = "THE RAMIFICATION\n"; our $mark_toc = "RAMIFICATION MAP AND TABLE OF CONTENTS\n"; our $mark_commands = "THE COMMANDS\n"; our $Maintainer = 'Maintainer'; our $Priority = 'Priority'; our $Package = 'Package'; our $Source = 'Source'; our $Section = 'Section'; our $Version = 'Version'; our $Description = 'Description'; our $Ramification = 'Ramification'; our $contrib = 'contrib'; our $cl_entry_dflt = '[Add changelog entries here.]'; our $utf8_unk = '?'; our %pri = ( required => 'req', important => 'imp', standard => 'std', optional => 'opt', extra => 'ext', ); our @pat_maint_early = ( qr/^Tm /, ); our @pat_maint_late = ( qr/^Tm QA$/, ); 1; debram-2.0.0.4/helper/RelSteps0000644000000000000000000003043610376441652012754 0ustar This file outlines the general steps the author took in updating debram (0.6.4) to (0.6.5), including several specifics where appropriate. These steps are not really scriptable (if they were, the author would have scripted them) and they probably require some judgment and understanding to follow profitably. However, seeing how the author went from (0.6.4) to (0.6.5) may at least save you some needless confusion, if you find yourself maintaining the package for the first time. The steps are good. Follow them generally, and you can release a well trimmed debram update. (This file is admittedly not as polished as one would like. The author doubts that many people will read it, so it does not seem worthwhile for the author to spend an excessive amount of time on it.) The steps refer to versions "0.6.4" (old) and "0.6.5" (new), but these numbers are just for illustration. The author has already done the actual update from (0.6.4) to (0.6.5). Hence, where "0.6.4" and "0.6.5" appear, you should substitute the old and new version numbers which apply to your present debram update work. 1. Ensure that you have the correct Packages and Sources files for the distribution you are working on. There are more than one way to get or construct these files. For example, you can download them from a convenient Debian FTP mirror, or concatenate them from an official set of Debian CDs. In going from (0.6.4) to (0.6.5), the author downloaded dists/Debian3.1r0/main/binary-i386/Packages.gz dists/Debian3.1r0/main/source/Sources.gz unpacking them with gunzip(1). The Sources file is not strictly necessary, incidentally, but it sometimes proves useful in helping to explain the build-dependencies among the archive's various packages. 2. Create a `debram/' working directory. 3. Copy `debram_0.6.4.dsc', `debram_0.6.4.tar.gz' and the Packages and Sources file into the `debram/' working directory. 4. Give the commands $ cd debram $ for A in Packages Sources ; do mv -v $A{,.orig} ; done $ dpkg-source -x debram_0.6.4.dsc $ cp -av debram-{0.6.4,0.6.5} $ cd debram-0.6.5 5. Create a working Packages file which includes additional Ramification information by $ helper/new-debram-body -P ../Packages.orig >../Packages NOTE RE THE FOLLOWING STEPS: The order of steps 6 through 12 does not matter. They can be done concurrently in any order. 6. Do not worry about updating version numbers and release dates in the various source files: helper scripts are provided which will do this for you automatically later. Also do not worry about updating the `debian/changelog' yet. 7. Observe that the new working Packages file includes a "Ramification: " line for each package ramified in debram.txt. Edit these lines as needed or desired. Add new "Ramification: " lines for packages which lack them. Note that you need not (and probably should not) type out the full ram title on a "Ramification: " line; the ram number suffices. For example, if you found that `bsdutils' were misramified with Ramification: 6100 GAME PROGRAMMING you would correct this to read Ramification: 5000 You would not waste time typing out "STANDARD UTILITIES AND FILES". Do not actually move package lines around in the body of the `debram.txt' file. A helper script is provided which will do this for you automatically in a later step, based on the changes you make now to the working Packages file. (It is a permissible alternative to edit the `debram.txt' file directly, incidentally, dispensing with the working Packages file. For most updates such direct editing is harder and more complex. However, for some updates---not most, but some---the author himself does edit directly; so, despite advice to the contrary, if you want to edit directly, then you might read through the lengthy comments at the head of `helper/new-debram-body'. That script can help you. Note that for historical reasons `debram.txt' is encoded in iso-8859-1---a convention you must follow unless you wish to undertake the wholesale conversion of the source code to utf-8.) 8. At the head of debram.txt, in the "RAMIFICATION MAP AND TABLE OF CONTENTS", add, delete or modify ramifications and ram titles as needed. (Do not do this lightly. The typical debram update will not alter the ramification map at all. However, sometimes it may be necessary to make a small correction or addition. Once in a long while it may be necessary to reform the entire ramification.) Make the corresponding changes at the foot of the file under "CROSS-REFERENCE (SEE ALSO)" and in the main body of the file. In the main body, it is not necessary to give an accurate count of packages after each ram title; just put a "(0)" there (the helper scripts will fix this for you automatically later). 9. At the foot of debram.txt, under "CROSS-REFERENCE (SEE ALSO)", add, delete and/or edit cross references as needed or desired. 10. Add new maintainers to `maint.txt' and otherwise edit the file as needed or desired. 11. Modify the various other source files as needed or desired. Note that users of debram (0.6.4) (released with sarge) have been promised that later debram-data (0.6.x) binaries would work with their existing debram (0.6.4) binaries. You probably should not break this compatibility (if NMUing, you really probably should not break it). If you do break it for some reason, you must number your new version at least 0.7. 12. (This step is not very important. You can safely skip it.) If a new year has turned since the last debram update, manually edit the copyleft date "2002-2005" (or whatever it currently is) to reflect the new year. Do this in `helper/DescLoc' and in each of the several other files referenced therein (probably debram.1, debram.txt and debian/copyright)---but not in `cmdsel.txt', unless you are actually updating that file. NOTE RE THE FOLLOWING STEPS: In general, unlike as steps 6 through 12 above, the order of the following steps does matter. Nothing prevents you from varying the steps and their order as needed, naturally, if you understand basically what the steps do. If unsure, however, follow the steps in order. 13. Return to the `debram/debram-0.6.5/' directory, if you are not still in it. 14. Give the commands $ helper/update-ver '0.6.5' $ helper/update-date '3 Oct 2005 21:00' (substituting the correct new version number and release date for those in the example). These scripts format and update the version number and release date (and time) as appropriate in various places about the source, including the man page and the changelog. For correct changelog handling, you must invoke the scripts in the order indicated, and you must invoke `helper/update-ver' exactly once (if you accidentally invoke it more than once, it's no disaster, but you'll have manually to remove the extra stanzas the script adds to the changelog's head). On the other hand, after `helper/update-ver', you can safely invoke `helper/update-date' as many times as desired. Only the date you give the last time you invoke the script matters. (This is useful if you aren't sure yet what the issue date should be. You can guess now, then give the right date later.) The `helper/update-date' script assumes that you are entering the time in UTC. This is what the author does. If you want to do otherwise, you'll have to modify the script or otherwise handle the matter yourself. If and only if your update is specifically associated with one of the daily 20:00-UTC Debian archive updates, you should use the date of the archive update and the time 21:00. Otherwise choose a convenient date on or near the day of your upload and (if you have no reason to do otherwise) use the time 00:00. 15. Canonicalize `maint.txt' by $ helper/sort-maint /tmp/maint.txt $ mv -v {/tmp,docdata}/maint.txt $ helper/check-maint-addr docdata/maint.txt ../Packages If the check script complains, fix the problem then run the check script again. 16. Check the consistency of the ramifications, their titles and their cross-references by $ helper/check-ram-titles $ helper/check-ram-titles -s $ helper/find-cmdsel-dupes If the check script complains, fix the problem then run the check script again. (It surprises the author how often this check script catches an error of some kind.) Note that the script wants a ram's several cross-references in a peculiar order: first refs to other rams within the local group of 10; then to other rams in the local division of 100, then to other rams in the local section of 1000; then, subject to these constraints, in ascending numerical order. For example, 8888 Foo ---> 8882 8885 8820 8821 8850 8511 1111 2222 3333 9999 The debram(1) binary automatically prepends an implicit reference to the ram's parent 8880, so the parent should not be listed explicitly. 17. Create a new debram.txt from the existing one and the working Packages file by $ helper/new-debram-body -T ../Packages >/tmp/debram.txt Skim `/tmp/debram.txt' to ensure that it looks as you would expect and seems correctly to reflect the edits you have made in the working Packages file. When satisfied, $ mv -v {/tmp,docdata}/debram.txt 18. Expand unnecessary tabs and remove stray line-ending blanks by $ helper/buffe-src Then, for good measure, invoke the scripts $ helper/check-ram-titles $ helper/check-ram-titles -s $ helper/find-cmdsel-dupes again. 19. Run $ cd .. $ diff -ruN debram-{0.6.4,0.6.5} >debram-0.6.5.diff Review debram-0.6.5.diff carefully to ensure that the new source includes the changes you want and no others. Observe that `debram-0.6.5/debian/changelog' has an automatically generated dummy entry atop it for the new version. Correct this according to what you see in the .diff. After completing the changelog, if desired, run the diff command again to get a complete .diff which reflects the new changelog entry. 20. Test-build the revised package with $ cd debram-0.6.5 $ dpkg-buildpackage -rfakeroot -uc -us $ fakeroot debian/rules clean $ cd .. 21. Install the revised package on your own system and see if it does not seem to work as expected. If it does, if you are otherwise satisfied, if you feel ready to upload, then proceed to build the package with pbuilder(1) or however else you usually build official packages for upload, run lintian/linda, etc., then upload. ------------------------------------------------------------------------ A CONDENSED RECIPE FOR UPDATING DEBRAM It is unclear whether the following would interest anyone but the author. Nevertheless, here it is---for the author's own reference if for no one else's. Given shell parameters like V0=0.6.4 # the old version number V=0.6.5 # the new version number DT='3 Oct 2005 21:00' # the release date and time here is a general recipe, probably not to be followed literally, which concentrates most of the steps above: cd debram for A in Packages Sources ; do mv -v $A{,.orig} ; done dpkg-source -x debram_$V0.dsc cp -av debram-{$V0,$V} cd debram-$V helper/new-debram-body -P ../Packages.orig >../Packages # (Steps 6 through 12 go here.) helper/update-ver $V helper/update-date "$DT" helper/sort-maint /tmp/maint.txt mv -v {/tmp,docdata}/maint.txt helper/check-maint-addr docdata/maint.txt ../Packages helper/check-ram-titles helper/check-ram-titles -s helper/find-cmdsel-dupes helper/new-debram-body -T ../Packages >/tmp/debram.txt mv -v {/tmp,docdata}/debram.txt helper/buffe-src helper/check-ram-titles helper/check-ram-titles -s helper/find-cmdsel-dupes cd .. diff -ruN debram-{$V0,$V} >debram-$V.diff diff -ruN debram-{$V0,$V} >debram-$V.diff cd debram-$V dpkg-buildpackage -rfakeroot -uc -us fakeroot debian/rules clean cd .. This recipe looks like a script, but it isn't quite. Several of the steps require preparation, thought, extension and/or modification, depending on the sort of update you are trying to do. Too many alternatives and options seem to exist for one to transform the recipe with reasonable effort into a sensible script which would help rather than hinder development (the scriptable parts have already been scripted; that's what all those `helper/' scripts are about). Nevertheless, once you have some experience updating debram, you may find the condensed recipe useful as a skeleton about which to organize your own debram update work. Anyway, this is what the author uses the recipe for. debram-2.0.0.4/helper/avg-crowd0000755000000000000000000000421410337102343013066 0ustar #! /usr/bin/perl use warnings; use strict; use FindBin; use lib $FindBin::RealBin; use Def; no integer; # This helper script determines the average ram size from the package's # point of view. It computes the crowding average. For example, in # # -------------- # 0001 RAM X (1) # -------------- # pkg-x1 # # -------------- # 0002 RAM Y (3) # -------------- # pkg-y1 # pkg-y2 # pkg-y3 # # -------------- # 0003 RAM Z (6) # -------------- # pkg-z1 # pkg-z2 # pkg-z3 # pkg-z4 # pkg-z5 # pkg-z6 # # -------------- # 0004 RAM Q (0) # -------------- # # the average ram size is # # ( 1*1 + 3*3 + 6*6 + 0*0 ) / ( 1 + 3 + 6 + 0 ) # = 46 / 10 = 4.60 packages. # # Notice that the average size is as seen from the package's not the # ram's point of view. In particular, notice that the empty # ram [0004 RAM Q] fails to reduce the average at all, because no # package is there to see its emptiness. Empty rams do not influence # this average, because they do not relieve package crowding. One can # only reduce the crowding average by actually splitting the crowded # rams up. # # This script counts actual listed packages. It ignores the number in # parentheses at each title-line's end. # # usage: avg-crowd { debram.txt } # # If no debram.txt file is named, the script examines the main # debram.txt file. # # our $fmt_n_pkg = "%${Def::ndig_pkg_count}d"; our $fmt_n_ram = "%${Def::ndig_ram_count}d"; our $fmt_avg = "%6.2f"; # Count. my @n; open F, '<', $Def::debram_txt; 1 while ne $Def::mark_main_body; { my $n; my $intitle = 0; while ( 1 ) { local $_ = ; if ( /^-----/ ) { push @n, $n if !$intitle && defined($n); $n = 0; $intitle = !$intitle; } elsif ( $intitle ) { last if $intitle && !( defined() && /^\d{$Def::ndig}/o ) } else { ++$n if /\S/; } } } close F; # Calculate. my $crowd = 0; my $n_pkg = 0; $crowd += $_*$_, $n_pkg += $_ for @n; my $avg = $crowd / $n_pkg; # Output. printf "A total of $fmt_n_pkg packages " . "spread over $fmt_n_ram branches.\n" . "The average package crowd is $fmt_avg in number.\n", $n_pkg, scalar(@n), $avg; debram-2.0.0.4/helper/check-cmdsel-debs-data0000755000000000000000000000264510377731464015367 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This extremely obscure helper script checks the packages named in # cmdsel-debs.data against one or more lists of selected packages (the # lists each having one binary package name per line). If you don't # know what this is about, you can ignore this script. our $file_data = "${FindBin::RealBin}/cmdsel-debs.data"; our $usage = < 1 } 1 .. length($o)-1 } @opt; if ( $opt{'?'} || $opt{h} ) { print $usage; exit 0; } # Read in the selections. my %sel; for ( @arg ) { open F, '<', $_; while () { chomp; $sel{$_} = 1 if /\S/ && !/^#/; } close F; } # Object to unselected packages in the data file. open F, '<', $file_data; { my $cmd2 = ''; my $sect2 = ''; while () { my( $cmd, $sect, $pkg ) = /^(\S+)\(([^()\s]+)\)\s+(\S+)\s*$/ or die "$0: badly formatted data line\n$_\n"; $sel{$pkg} or warn "$0: package $pkg unselected or unknown\n"; $sect gt $sect2 || ( $sect eq $sect2 && $cmd gt $cmd2 ) or warn "$0: commands $cmd2($sect2) and $cmd($sect) are misordered\n"; $cmd2 = $cmd; $sect2 = $sect; } } close F; debram-2.0.0.4/helper/filter-debram-body0000755000000000000000000000457410474437362014674 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use bytes; use FindBin; use lib $FindBin::RealBin; use Def; # This script searches certain fields of a Packages file for a pattern. # If it finds the pattern, then it prints the corresponding line from a # debram.txt body. our %field = map { $_=>1 } qw( Package Source Provides Pre-Depends Depends Recommends Description ); our $usage = <1} @o; } @opt; if ( $opt{'?'} || $opt{h} || @arg != 3 ) { print $usage; exit 0; } my( $fn_packages, $pat, $fn_body ) = @arg; my $w0 = $Def::w_maint + $Def::w_pri; my $w3 = $w0 - 3; my %p; # Scan the Packages file. { local $/ = ''; open P, '<', $fn_packages; while (

) { my( $name ) = /^Package: (\S+)/m or die "$0: cannot determine the package name of\n$_\n"; for ( /^.*$/mg ) { my( $key, $text ) = /^(\S+):(.*)$/ or next; $field{$key} or next; $p{$name} = 1 if $text =~ /$pat/; } } close P; } # Filter the debram.txt body to stdout. { my $out = ''; my $doprint = ''; open D, '<', $fn_body; while () { if ( !/^\S/ ) { $out .= $_; print $out if $doprint || !$opt{x}; $out = ''; $doprint = ''; } else { my( $name ) = /^.{$w3} \267 (\S+)/; if ( defined $name ) { if ( $p{$name} ) { $out .= $_ ; $doprint = '1'; } } else { $out .= $_; } } } close D; print $out if $doprint || !$opt{x}; } # Here are some interesting patterns to feed to the script: # \b(?:perl(?:api)?\d*)\b # \bpy|python # ruby # \b(?:lib)?(?:i|pl)?(?:tcl|tk)|expect|wish # \b(?:lib(?:atk|bonobo\w*|cairo|gconf|gdk|gl|glade|glu|gnome\w*|gtk|ice|pango|qt|sdl|sm|x|xaw|xcursor|xext|xfixes|xft|xi|xinerama|xmu|xpm|xrandr|xrender|xt)|gconf|gdk|kdelibs|tcl|tk|x11|xfonts|xlibmesa|xlibs)\d*\b # \b(?:lib(?:bonobo\w*|gconf|gnome\w*)|gconf)\d*\b # libkde|kdelibs debram-2.0.0.4/helper/count-pkgs0000755000000000000000000000446710306364242013305 0ustar #! /bin/sh -e # count-pkgs # # This shell script counts the packages in a Packages file, and also # tells how many of these have been ramified (that is, how many of them # include a Ramification field). In reality, all it does is to count # Package and Ramification lines. If a package control included # multiple Package or Ramification lines, the script wouldn't even # notice. # # Usage: # # count-pkgs { Packages } # # If no Packages file is specified, the script looks for one # named "Packages" in the current directory. # # THE RAMIFICATION CONTROL FIELD # # A standard Debian control header includes no ramification information. # In debram development, however, a nonstandard "Ramification:" field is # often added to each package control paragraph in the developer's local # working copy of the Packages file. Usually the "Ramification:" line # is added at the paragraph's head, above even the "Package:" line. For # example, # # Ramification: 8214 DEBTAGS # Package: debram # Priority: extra # Section: admin # ... # # The ram title ("DEBTAGS" in the example) after the four-digit number # is for the developer's convenience only and is entirely optional. It # need not be correct. It need not be present at all. The helper # scripts ignore it. Because the helper/new-debram-body script # automatically corrects and adds titles as needed, normally the # developer does not even bother to type them; he types only # # Ramification: 8214 # # (and of course he uses some convenient editor macro like # vim(1)'s ":imap " to enter the "Ramification: " part of the line, # so in truth he does not manually type very much: only the four # digits). # # Note that there is really no such thing as a "Ramification:" control # field. It is a fiction, existing in the developer's local development # directory only, as a convenience in development. No debram user ever # sees the fictional "Ramification:" control field. # # BUGS # # A better, faster, more efficient, more robust script could surely be # written, but there is no plan to write one, unless a development need # thereto arose. This is after all only a development helper. # # F0=Packages if [[ $# > 0 ]]; then F=$1 ; else F=$F0 ; fi echo -n "ramified pkgs: " sed $F -ne '/^Ramification:/p' | wc -l echo -n "total pkgs: " sed $F -ne '/^Package:/p' | wc -l debram-2.0.0.4/helper/Bnm.pm0000644000000000000000000000660510306364242012333 0ustar package Bnm; use warnings; use strict; use integer; # Notice that the Bnm::cmp_prefixless($$) function defined here uses # neither @relem nor @gelem; it uses only @prefix. If from this module # you will be using only Bnm::cmp_prefixless(), then you need not worry # about the @relem and @gelem lists. our $active = 1; # set to 0 if the element lists below are not ready. our @prefix = qw( lib ); our @relem = qw( perl python ); our @gelem = qw( dev doc common issue patch base data bin client tools dbg server source utils mod ssl headers html image modules manpages plugins text dict examples ldap ttf misc book clients slang test lib extra sound utf docs en user howto info pop runtime src altdev pic core demo manual pdf simple util conf contrib crypto debug imap lite libs script servers beta config extras fonts help intro plain progs ps static tiny tutorial agent crypt daemon driver faq icons mmx prof proxy scripts session sse suid system template users devguide example ref books spoilers usersguide ); my %prefix = map { $_ => 1 } @prefix; my %relem = map { $_ => 1 } @relem ; my %gelem = map { $_ => 1 } @gelem ; # Compare two possibly prefixed names as prefixless. sub cmp_prefixless ($$) { $active or return( $_[0] cmp $_[1] ); my @unprefixed = @_; my @i_prefix = ( -1, -1 ); my $i = 0; while ( $i <= $#prefix ) { my $prefix = $prefix[$i]; my $prefix_qm = quotemeta $prefix; my $last = 0; for my $j ( 0, 1 ) { my $u = $_[$j]; if ( $u =~ s/^$prefix_qm(?=[a-z])// ) { $unprefixed[$j] = $u; $i_prefix [$j] = $i; $last = 1; } } last if $last; ++$i; } return( $unprefixed[0] cmp $unprefixed[1] || $i_prefix [0] cmp $i_prefix [1] ); } # Reduce a package name to its basename -- that is, its name without # version numbers, generic following elements like -dev or -doc, or a # preceding prefix (probably `lib'). In array context, also return the # name's elements. (This function was written some time ago. Since # then, experience has not shown the function to be very useful in # practice. Nevertheless it remains here if you want it.) sub bnm (;$) { local $_ = @_ ? shift() : $_; s/^\d*//; /^[a-z]/ or return wantarray ? () : undef; # Break the name's elements out. my @e = split /[-+]/; s/[^a-z].*//s for @e; @e = grep { length } @e; @e or die "$0: name $_ has no elements " . "(this error message should have been unreachable)\n"; # Deprefix the first element. my $e0_nopre = do { my $e0 = $e[0]; for ( @prefix ) { my $prefix = quotemeta; last if $e0 =~ s/^$prefix(?=[a-z])//; } $e0; }; # Remove generic elements. my @e_nogen = ( $e0_nopre ); { my $s = 1; # state variable for ( @e[ 1 .. $#e ] ) { if ( $s ) { if ( $gelem{$_} ) { $s = 0; } else { push @e_nogen, $_; } } elsif ( $relem{$_} ) { push @e_nogen, $_; $s = 1; } } } # Render the basename. my $bnm = join '-', @e_nogen; return wantarray ? ( $bnm, $e[0], @e_nogen ) : $bnm; } 1; debram-2.0.0.4/helper/check-maint-addr0000755000000000000000000000423510336233402014273 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This helper script checks for different maintainers who claim the same # e-mail address. Because such different maintainers are probably # really the same maintainer, the script warns the developer to look # into the matter. Additionally, the script ensures that the std maint # names fit the proper format. (It does not check alphebetization, # though. See `sort-maint' for this.) # # usage: check-maint maint.txt Packages # # my $pat_mnstd = qr/^.{1,${Def::n_init}} .{1,${Def::n_last}}$/; my %mnlong; # long-form maintainer names my %mnstd ; # debram-standard short-form maintainer names my %addr ; # e-mail addresses @ARGV == 2 or die "usage: $0 maint.txt Packages\n"; my ( $maint_txt, $packages_file ) = @ARGV; # Read maint.txt. { local $/ = ''; open MAINT_TXT, '<', $maint_txt or die "$0: cannot open maint file $maint_txt\n"; while ( ) { my @c = grep { /\S/ } split '\n'; my $mnstd = shift @c; $mnstd =~ $pat_mnstd or die "$0: bad std maint name $mnstd\n"; $mnstd{$mnstd} and die "$0: std maint name $mnstd given twice\n"; @c or die "$0: $mnstd has no full name\n"; for ( @c ) { defined $mnlong{$_} and die "$0: long maint name $_ given twice\n"; $mnlong{$_} = $mnstd; } $mnstd{$mnstd} = { mnlong => [ sort @c ], addr => {} }; } close MAINT_TXT; } # Read the e-mail addresses from the Packages file. { open PACKAGES_FILE, '<', $packages_file or die "$0: cannot open Packages file $packages_file\n"; while ( ) { my( $mnlong, $addr ) = /^${Def::Maintainer}:[ \t]+([^<>]+?)[ \t]+<([^<>]+?)>/o or next; my $mnstd = $mnlong{$mnlong}; defined $mnstd or print( "unknown ${Def::Maintainer} $mnlong <$addr>\n\n" ), next; $mnstd{$mnstd}{addr}{$addr} = 1; $addr{$addr}{$mnstd} = 1; } close PACKAGES_FILE; } # Report e-mail addresses claimed by multiple maintainers. my $exit = 0; for my $addr ( keys %addr ) { if ( scalar keys %{ $addr{$addr} } > 1 ) { print "$_ <$addr>\n" for keys %{ $addr{$addr} }; print "\n"; } } debram-2.0.0.4/helper/cmdsel-debs.data0000644000000000000000000000565310377734510014307 0ustar atq(1) at atrm(1) at automake(1) automake1.9 awk(1) gawk bunzip2(1) bzip2 bzcat(1) bzip2 c++(1) g++-3.3 cal(1) bsdmainutils cc(1) gcc-3.3 cpp(1) cpp-3.3 csh(1) tcsh emacs(1) emacs21-nox eview(1) vim evim(1) vim ex(1) vim fakeroot(1) fakeroot ftp(1) ftp g++(1) g++-3.3 gcc(1) gcc-3.3 gcov(1) gcc-3.3 gs(1) gs-esp gunzip(1) gzip info-stnd(1) info iprint(1) iprint irc(1) ircii jam(1) bjam ldapadd(1) ldap-utils li(1) limo mad(1) mmv mcp(1) mmv mdecrypt(1) mcrypt mln(1) mmv nas(1) nas netpipe(1) netpipe-tcp nex(1) nvi nview(1) nvi octave(1) octave2.1 openjade(1) openjade1.3 pkill(1) procps python(1) python2.3 red(1) ed reset(1) ncurses-bin rolldice(1) rolldice rview(1) vim rvim(1) vim sar(1) sysstat sh(1) bash snice(1) procps talk(1) talk telnet(1) telnet vi(1) vim view(1) vim w(1) procps wnintro(1) wordnet write(1) bsdmainutils zcat(1) gzip zcmp(1) gzip zegrep(1) gzip ipfw(4) ipfwadm kmem(4) manpages port(4) manpages ptmx(4) manpages urandom(4) manpages vcsa(4) manpages zero(4) manpages at.deny(5) at english(5) ispell modules(5) module-init-tools modules.modutils(5) modutils wnintro(5) wordnet-base wtmp(5) manpages gpl(7) cpp iso-8859-1(7) manpages latin1(7) manpages url(7) manpages urn(7) manpages wnintro(7) wordnet addgroup(8) adduser delgroup(8) adduser depmod(8) module-init-tools depmod.modutils(8) modutils ifdown(8) ifupdown insmod(8) module-init-tools insmod.modutils(8) modutils ipfwadm(8) ipfwadm kallsyms.modutils(8) modutils ksyms.modutils(8) modutils lsmod.modutils(8) modutils modinfo(8) module-init-tools modinfo.modutils(8) modutils modprobe.modutils(8) modutils rmmod.modutils(8) modutils talkd(8) talkd traceroute(8) traceroute debram-2.0.0.4/helper/strip-lib-data0000755000000000000000000000163310336136774014031 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; our %opt = map {$_=>1} @ARGV; # The present version provides no options. # You do not need this optional helper script to install, use, modify, # develop, build, package or distribute `debram'. If you are developing # the debram, however, you may possibly find the script convenient. # # This brief script strips the top- and bottommatter from debram.txt. # It acts as a filter, taking the full debram.txt on stdin, printing the # stripped debram.txt on stdout. It also verifies that each ram shows # the correct package count. 1 while <> ne $Def::mark_main_body; <>; $/ = ''; while ( <> ) { chomp; $_ .= "\n\n"; my @c; push @c, $1 while s/\A(.*\n)//; $c[1] =~ /(\d{4}) .+? \((\d+)\)/ or last; @c-4 == $2 or die "miscount on ram $1\n"; @c = @c[3..$#c-1] if $opt{strip_title}; print @c; } debram-2.0.0.4/helper/cmdsel-debs0000755000000000000000000001477610377733444013415 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; use Cmdsel; # This helper script lists commands and packages for the body of # cmdsel-debs.txt. It requires the path to the big Contents.gz file. # It optionally also accepts the names of one or more files containing # lists of selected binary packages, one name per line; if so, the # script outputs no package not listed. our $cmd_zcat = 'zcat'; our $mark_contents = qr/^FILE\s+LOCATION\s*$/; our $width = 24; our $file_cmdsel = $Def::cmdsel_txt; our $file_underride = "${FindBin::RealBin}/cmdsel-debs.data"; our $usage = < [ { a => 'usr/bin/' , b => '' }, { a => 'bin/' , b => '' }, { a => 'usr/share/man/man1/' , b => '.1.gz' }, { a => 'usr/X11R6/bin/' , b => '' }, { a => 'usr/X11R6/man/man1/' , b => '.1x.gz' }, { a => 'usr/share/man/man1/' , b => '.1x.gz' }, { a => 'usr/X11R6/man/man1/' , b => '.1.gz' }, ], '1x' => [ { a => 'usr/X11R6/bin/' , b => '' }, { a => 'usr/bin/' , b => '' }, { a => 'bin/' , b => '' }, { a => 'usr/X11R6/man/man1/' , b => '.1x.gz' }, { a => 'usr/share/man/man1/' , b => '.1.gz' }, { a => 'usr/share/man/man1/' , b => '.1x.gz' }, { a => 'usr/X11R6/man/man1/' , b => '.1.gz' }, ], '8' => [ { a => 'usr/sbin/' , b => '' }, { a => 'usr/bin/' , b => '' }, { a => 'bin/' , b => '' }, { a => 'sbin/' , b => '' }, { a => 'usr/share/man/man8/' , b => '.8.gz' }, ], ); for my $s ( qw( 4 5 7 ) ) { my $x = "${s}x"; $f{$s} = [ { a => "usr/share/man/man$s/", b => ".$s.gz" }, { a => "usr/X11R6/man/man$s/", b => ".$x.gz" }, { a => "usr/share/man/man$s/", b => ".$x.gz" }, { a => "usr/X11R6/man/man$s/", b => ".$s.gz" }, ]; $f{$x} = [ { a => "usr/X11R6/man/man$s/", b => ".$x.gz" }, { a => "usr/share/man/man$s/", b => ".$s.gz" }, { a => "usr/share/man/man$s/", b => ".$x.gz" }, { a => "usr/X11R6/man/man$s/", b => ".$s.gz" }, ]; } my $width1 = $width - 1; # Read command-line arguments and options. while ( @ARGV >= 2 && ( $ARGV[0] eq '-t' || $ARGV[0] eq '-m' ) ) { my( $opt, $file ) = splice @ARGV, 0, 2; if ( $opt eq '-t' ) { $file_cmdsel = $file } if ( $opt eq '-d' ) { $file_underride = $file } } my @opt; my @arg; push @{ /^-\S/ ? \@opt : \@arg }, $_ for @ARGV; my %opt = map { my $o = $_; map { substr( $o, $_, 1 ) => 1 } 1 .. length($o)-1 } @opt; if ( @arg < 1 || $opt{'?'} || $opt{h} ) { print $usage; exit 0; } my $file_contents = shift(@arg); # (At this point, @arg contains the names of the selections files, # if any.) # Subroutine: eliminate duplicates from a list, without otherwise # affecting the list ordering. sub elimdup (@) { my @ret; my %already; for ( @_ ) { push @ret, $_ unless $already{$_}; ++$already{$_}; } return @ret; } # Read in and process cmdsel.txt. my $parse; open F, '<', $file_cmdsel; $parse = Cmdsel::parse ; close F; # Read in the selections. my %sel; for ( @arg ) { open F, '<', $_; while () { chomp; $sel{$_} = 1 if /\S/ && !/^#/; } close F; } print "$_\n" for keys %sel; # Read in Contents.gz. my %pkg; open F, "-|", "$cmd_zcat $file_contents"; 1 until =~ $mark_contents; while () { my( $file, $pkgs ) = /^(\S+)\s+(\S+)\s*$/ or die "$0: badly formatted Contents line\n$_\n"; exists $pkg{$file} and die "$0: file $file listed twice\n"; $pkg{$file} = $pkgs eq '->' ? [] : [ elimdup split /\s*,\s*/, $pkgs ]; $pkg{$file}[$_] =~ /\// or splice @{ $pkg{$file} }, $_, 1 for reverse 0 .. $#{ $pkg{$file} }; s/^.*\/// or die "$0: impossible" for @{ $pkg{$file} }; !@arg || $sel{ $pkg{$file}[$_] } or splice @{ $pkg{$file} }, $_, 1 for reverse 0 .. $#{ $pkg{$file} }; } close F; # Read in underrides. my %underride; if ( !$opt{D} && -e $file_underride ) { open F, '<', $file_underride; while () { my( $cmdsect, $pkg ) = /^(\S+)\s+(\S+)$/; $underride{$cmdsect} = $pkg; } close F; } # Create an output record for each appropriate cmdsel.txt entry. my @out0; for my $ram ( keys %$parse ) { my $ram1 = $parse->{$ram}; my $x = $ram1->{x}; for my $cmd ( keys %$x ) { next if $cmd eq '...'; my $cmd1 = $x->{$cmd}; my $c = $cmd; $c =~ s/^.*\///; $c =~ s/\s+-.*$//; my $sect = $cmd1->{sect}; my $isx = $cmd1->{isx }; next if $sect eq $Cmdsel::shell_sect; my $sx = $sect . $isx; my $cmdsect = "$cmd($sx)"; my $f; { # Find the best candidate file. A file is a candidate if listed # in %pkg. It is a better candidate if it is also provided by at # least one selected package. It is the best candidate if # provided by exactly one selected package. my $quality = 0; for my $i ( 0 .. $#{ $f{$sx} } ) { my $fa = $f{$sx}[$i]{a}; my $fb = $f{$sx}[$i]{b}; my $f0 = "$fa$c$fb"; $pkg{$f0} or next; my $q0 = 1; my $n0 = @{ $pkg{$f0} }; if ( $n0 ) { ++$q0; ++$q0 if $n0 == 1; } if ( $q0 > $quality ) { $f = $f0; $quality = $q0; } last if $quality >= 3; } } my $pkgs ; $pkgs = $pkg{$f} if defined $f; my $pkgstr; if ( defined($pkgs) && @$pkgs == 1 ) { $pkgstr = $pkgs->[0]; $underride{$cmdsect} and warn "$0: underride for $cmdsect ignored\n"; } elsif ( defined($underride{$cmdsect}) ) { $pkgstr = $underride{$cmdsect}; } else { $pkgstr = defined($pkgs) && @$pkgs ? join( ',', @$pkgs ) : '?'; warn "$0: missing underride for $cmdsect\n"; } push @out0, { sx => $sx , cmd => $cmd , cmdsect => $cmdsect, pkgs => $pkgs , pkgstr => $pkgstr , }; } } my @out = sort { $a->{sx } cmp $b->{sx } or $a->{cmd } cmp $b->{cmd } or $a->{cmdsect} cmp $b->{cmdsect} or $a->{pkgstr } cmp $b->{pkgstr } } @out0; printf "%-${width1}s %s\n", "$_->{cmd}($_->{sx})", $_->{pkgstr} for @out; debram-2.0.0.4/helper/Cmdsel.pm0000644000000000000000000001011510377732712013026 0ustar package Cmdsel; use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; # This module provides the function parse() to parse a cmdsel.txt file. our $shell_sect = '0'; our $x_div = '8'; our $x_ext = 'x'; our $shsect_dflt = '(shell)'; our $pat_line ; our $pat_cmdsect ; our $pat_cmdsect0; our $pat_title ; our $xpat_interm ; our $pat_shortbar; our $pat_longbar ; { my $w1 = $Def::width_shortbar ; my $w2 = $Def::width_shortbar + 1; my $n0 = $Def::ndig ; my $n2 = $Def::ndig - 2; $pat_line = qr/^(.{${Def::w_whatis}})- (\S(?:.*?\S)??)\s*$/o; $pat_cmdsect = qr/^(\S(?:.*?\S)??)(\s+)(\([^()]+?\)|\[[^\[\]]+?\])$/o; $pat_cmdsect0 = qr/^(\S(?:.*?\S)??)$/o; $pat_title = qr/^((\d)(\d)\d{$n2}) (\S(?:.*?\S)??)\s*$/o; $xpat_interm = qr/^\d{$n0} \S/o; $pat_shortbar = qr /^-{$w1}$/o; $pat_longbar = qr /^-{$w2}/o ; } sub parse { for ( 1, 2 ) { 1 while shift ne $Def::mark_commands } shift; my $intitle = ''; my $intermission = ''; my $ram; my %parse = (); for (@_) { /^.{0,${Def::width_fmt}}$/ or die "$0: line $. too long\n$_\n"; /$pat_longbar/o and $intitle = !$intitle, next; if ( $intitle ) { last unless /\S/; my( $ramno, $sect, $div, $title ) = /$pat_title/o; $intermission = !defined $ramno; next if $intermission; my $isx = $div eq $x_div ? $x_ext : ''; defined $ram and die "$0: confused: new ram $ramno starts " . "before old ram $ram->{ram} is stored\n"; $ram = { ram => $ramno, sect => $sect , div => $div , isx => $isx , title => $title, line => $_ , x => {} , }; } elsif ( !$intermission ) { if ( /\S/ ) { # Continue the ram. my( $cmdsect, $desc ) = /$pat_line/o or die "$0: badly formatted Guide line $.\n$_\n"; $cmdsect =~ s/\s*$//; my( $cmds, $spaces, $sect0 ); unless ( ( $cmds, $spaces, $sect0 ) = $cmdsect =~ /$pat_cmdsect/o ) { ( $cmds ) = $cmdsect =~ /$pat_cmdsect0/o or die "$0: command and section missing in\n$_\n"; $sect0 = $ram->{sect} eq $shell_sect ? "[$shsect_dflt]" : '(' . $ram->{sect} . ( $ram->{isx} ? $x_ext : '' ) . ')'; } my @cmd = split /\s*,\s*/, $cmds; my( $shsect, $sect ); my $isx = ''; if ( $sect0 =~ /^\[/ ) { ( $shsect ) = $sect0 =~ /^\[(.+)\]$/ or die "$0: bad shell section $sect0\n"; $sect = $shell_sect; } else { my $x0; ( $sect, $isx ) = $sect0 =~ /^\((\d)(${x_ext}?)\)$/ or die "$0: bad man section $sect0\n"; !defined($spaces) || length($spaces) == 1 or warn "$0: \"$cmdsect\" misspaced\n"; } my $x = $ram->{x}; my $line = $_ ; for ( @cmd ) { exists $x->{$_} and die "$0: command $_ listed twice (both in ram $ram->{ram})\n"; $x->{$_} = { cmdsect => $cmdsect, cmds => $cmds , sect0 => $sect0 , shsect => $shsect , sect => $sect , isx => $isx , desc => $desc , line => \$line , }; } ( !defined($shsect) && ( $ram->{sect} eq $shell_sect || $sect ne $ram->{sect} || !$isx ne !$ram->{isx} ) ) || ( defined ($shsect) && $ram->{sect} ne $shell_sect ) and warn "$0: $cmdsect is mislisted " . "in section $ram->{ram}$ram->{isx}\n"; } else { # End the ram. exists( $parse{ $ram->{ram} } ) and die "$0: ram $ram->{ram} defined twice\n"; $parse{ $ram->{ram} } = $ram; $ram = undef; } } } defined $ram and die "$0: confused: last ram $ram->{ram} " . "does not end properly, not stored\n"; return \%parse; } 1; debram-2.0.0.4/helper/DescLoc0000644000000000000000000000401010543352447012513 0ustar These notes are for use in development, to ensure that developers remember manually to put the correct dates and descriptions in all the correct places before packaging `debram' for distribution. Otherwise these notes are unimportant. Optional helper scripts are included to update the version number and issue date across the several files automatically. The most important updates needed are those to `def.h' and `debian/changelog'. DATA The version number is 1.0.3 The issue date is 23 December 2006 The copyleft date is 2002-2006 The correct one-line debram.deb and debram-data.deb descriptions are respectively ramified catalog of available .debs debram's architecture-independent data There correct Debian Ramification and Command Selection Guide abstracts are respectively Ramified catalog of available .debs Ramified catalog of GNU/Linux commands The correct one-line debram(1) interpretation is look .debs up in the Debian Ramification Other items needing updating may include * the Debian issue, * various paragraph descriptions, * various document histories, * an About the Author, * various release-specific bodies of data, and * the changelog. FIELDS PRESENT BY FILE README issue date paragraph debian/changelog version changelog issue date debian/copyright copyleft date debian/debram-data.doc-base.debram abstract debian/debram-data.doc-base.debram-cmdsel abstract docdata/cmdsel.txt version issue date paragraph debian issue (under Application) one-line (in the body under "/^debram (1)") history about the author copyleft date data docdata/cmdsel-debs.txt version issue date debian issue data docdata/debram.1 issue date one-line paragraph version debian issue copyleft date docdata/debram.txt version issue date paragraph one-line (in the body under "/ debram ") history copyleft date data src/argp.c one-line src/def.h version helper/cmdsel-debs.data data helper/selections debian issue data debram-2.0.0.4/helper/strip-ram-field0000755000000000000000000000040510306364242014176 0ustar #! /bin/sh -e # strip-ram-field # # This one-line script strips the fictional "Ramification:" field from a # Packages file. It acts as a filter, taking the existing Packages # on stdin, printing the stripped Packages on stdout. sed -ne '/^Ramification:/!p' debram-2.0.0.4/helper/subtract0000755000000000000000000000240510363200424013022 0ustar #! /usr/bin/perl use warnings; use strict; use integer; our $usage = < \$big , fh => \$fh_big }, { filename => \$small, fh => \$fh_small }, ) { if ( ${ $_->{filename} } eq '-' ) { ${ $_->{fh} } = \*STDIN } else { open ${ $_->{fh} }, '<', ${ $_->{filename} } } } # Here is the main program. In Perl, it is very short. my %small = map {$_=>1} <$fh_small>; print for grep { !$small{$_} } <$fh_big>; debram-2.0.0.4/helper/std-notinst0000755000000000000000000000313110363200153013455 0ustar #! /usr/bin/perl use warnings; use strict; use integer; use FindBin; use lib $FindBin::RealBin; use Def; $/ = ''; # This script checks that you have all the standard- and higher-priority # packages listed in the Packages file fully installed on your system, # and that you have the right versions installed. Any you do not have # properly installed, it prints the names of to stdout, one per line. our $usage = <) { my( $pkg ) = /^${Def::Package}: (\S+)\s*$/m or warn "$0: can find no Package field in\n$_"; my( $pri ) = /^${Def::Priority}: (\S+)\s*$/m or warn "$0: can find no Priority field in\n$_"; my( $ver ) = /^${Def::Version}: (\S+)\s*$/m or warn "$0: can find no Version field in\n$_"; next if $pri eq 'optional' || $pri eq 'extra'; my $dpkg_s = `dpkg -s $pkg 2>/dev/null`; my $dpkg_err = $?; my( $instver ) = $dpkg_s =~ /^Version: (\S+)\s*$/m; next if !$dpkg_err && $dpkg_s =~ /^Status: install ok installed$/m && defined($instver) && $instver eq $ver; print "$pkg\n" unless $opt{q}; $any_missing = '1'; } exit 1 if $opt{1} && $any_missing; debram-2.0.0.4/helper/README0000644000000000000000000000504712523713663012150 0ustar This directory's contents, and also the rest of this README, are probably now mostly obsolete. -------------------------------------------------------- Over time a free-software developer tends to write and accumulate a number of helper scripts. This author's Debram helper scripts are kept here. You need none of these helper scripts to install, run, use, modify, develop, build, package or distribute Debram. The scripts have no unifying theme except that they have been used in Debram development, but if you are developing Debram you may find some of the scripts convenient, especially `new-debram-body'. Because these helper scripts are intended for Debram developers not Debram users, less time, attention and care have been given in their preparation than in that of the main Debram source. Sometimes much less so. Common helper code is not consistently factored, for example; and Perl not C is used. On the other hand, the more frequently used helper scripts like `new-debram-body' and `buff-expand' are indeed reasonably well developed; it depends on the specific script. Each script is written, refined and modified as development needs arise. Some of the scripts (like `new-debram-body') are specific to Debram development, useless elsewhere. Others (like `buff-expand') could in theory be used anywhere. (Why aren't the latter packaged except here in the debram source? Answer: the scripts seem neither important enough to distribute as separate packages nor germane enough to install with the debram package; nor are they written in C/C++; and besides, the author's time is limited. They're just helper scripts.) The script `buffe-src' must be called from the top source directory. The other scripts may be called from anywhere. Each script has a comment at its head explaining what the script does and what it is for. Refer to each script source, therefore, for further information. (These scripts are all meant to run correctly on any Debian system with the standard packages installed. However, they are only development helpers---they neither contribute to the binaries nor affect the build process in any way---so automated testing of the helpers on a standard-only chroot has never been implemented and is not planned. In fact the helpers have never been tested on standard-only Debian at all. If you encounter a case where the scripts need optional packages installed to work right, please report it to Debian's Bug Tracking System as a "Severity: minor" bug.) Further notes of interest to Debram developers and maintainers are found in the file `RelSteps'. debram-2.0.0.4/docdata/0000755000000000000000000000000012523713034011372 5ustar debram-2.0.0.4/docdata/BUILDING0000644000000000000000000000723212523712772012526 0ustar This file was last updated in 2005. It is now probably mostly irrelevant, but is retained here for reference for the time being. ------------------------------------------------------------------------ This file contains notes relevant to users who want to build their own debram packages. UNPACKING Since you are reading these words, you probably knew it already, but the usual way to unpack the debram source is to put the .dsc and .tar.gz files in the current directory and to run the appropriate "dpkg-source -x" command. There is no .diff.gz or .orig.tar.gz, because debram is a native Debian package. See the dpkg-source(1) man page for further information. BUILDING It is generally recommended to build the debram source as a standard Debian package. From the directory in which this file resides, $ dpkg-buildpackage -rfakeroot -uc -us $ fakeroot debian/rules clean omitting the " -uc -us" if building the package for actual upload to the official Debian archive. However, you can alternately build the source not for packaging or installation but just for immediate local testing with $ DEBRAM_LOCAL=1 make clean $ DEBRAM_LOCAL=1 make BUILDING FOR SARGE Even if you have downloaded the debram source from Debian unstable (sid) or testing (etch), nothing prevents you from building it on and for a Debian sarge stable platform. In the file `debian/control', if the Standards-Version number is not "3.6.1", revert it to "3.6.1"; then build on sarge and install as usual. On the other hand, most sarge users need only to update the debram-data binary package, not the debram binary package. The debram (0.6.4) binary distributed with sarge works fine with later debram-data (0.6.x). You won't hurt anything by building and installing your own local debram (0.6.x) binaries, but for most sarge users this probably isn't necessary. Just update debram-data. INSTALLING Since you are reading these words, you probably knew it already, but the usual way to install a package you have built yourself is by "dpkg -i". See the dpkg(8) man page for further information. [TO DEBRAM MAINTAINERS] [Debram maintainers are asked not to ignore this file in future uploads, but rather to keep it up to date as necessary---or if not so, then to delete it, so that by obsolescence it not mislead. Because of the nature of the problem debram treats, it is desirable to keep debram (0.6.x) as backportable as possible to sarge. However, some kinds of potential changes in Debian policy could conceivably render such backportability hard to maintain in future debram issues. If so, at least these notes should accurately reflect the fact.] [Minor changes to the source which do not call new shared library functions are unlikely to affect the buildability of this source on sarge. Trouble on this front is more likely to come if changes to the source must be made to comply with an updated Debian policy. Since updated Debian policy usually includes appropriate transition clauses, with a little care we can probably avoid the trouble.] [The debram shipped with sarge was version (0.6.4). Sarge debram users were promised that future debram-data (0.6.x) binaries would work with debram (0.6.4), but they were not promised that the debram (0.6.x) source would be buildable on sarge. With the slight modification noted above, the present debram source *is* buildable on sarge. This is good and desirable, is worth some limited effort to continue to support, and should not be broken without reason; but it is not strictly necessary for future debram issues. We can always rely on backports.org if the need arises, after all.] [Further notes of interest to Debram maintainers can be found in `helper/RelSteps'.] debram-2.0.0.4/docdata/HISTORY0000644000000000000000000001363712523706217012475 0ustar Debram used to more important and much bigger. Before Debtags, Debram cataloged Debian packages as a city library catalogs its nonelectronic, paper-and-ink books. Well, city libraries are arguably obsolete, and now Debram is, too. Debtags has replaced Debram's formerly main data and principal function. From its early days however, the Debram package incidentally included cmdsel.txt, the Command Selection Guide. Though old and now somewhat outdated, at this writing the Command Selection Guide had not yet grown obsolete. The writer knows at least one new college graduate who credits the Guide with helping him to prepare for a job interview, so the Guide may have some use yet. Though the debram(1) command and its data have been removed from the Debram package, the package and its Command Selection Guide remain. -- Thaddeus H. Black, Sat, 09 May 2015 Older history follows, written about 2004. ------------------------------------------------ Enrico Zini suggests the inclusion of the following post, which reveals some debram history. To: Debian usability ML From: "Thaddeus H. Black" Subject: Re: Debtags and Debram (Was: Re: New debtags suite just uploaded) List-Archive: Date: Fri, 2 Jul 2004 15:29:41 +0000 ... Enrico wrote, > I'm having a hard time understanding the > structure of your categorization: I see you're > using some important background in library > science that I'm not knowledgeable of, and I'm > even having trouble understanding the logic in > which your hierarchy is structured. I confess that I have no background in library science. A bit of debram history may serve to clarify the situation. The history begins in the potato era with a rationale: namely that, like you and everyone else on this list, I couldn't ever find anything in Debian. It was one giant heap of four thousand packages. This drove me crazy, and since neither Ranganathan nor any other skilled librarian actually seemed to be working on solving the problem, in March 2002 I started sorting the packages into piles, then dividing the piles into smaller piles, then moving the little piles around subjectively until they attained an overall pattern that somewhat followed the traditional Unix man sections and otherwise made subjective sense to me. Then I labeled the piles and sorted them some more. The process was entirely iterative. I suppose that by now I have attained a better overall knowledge of the contents of the Debian archive than all but a very few people in the world, but I still do not know the first principle of library theory. I just sort stuff. Then you debtags guys came along (or maybe you were there before, but I didn't know it). You had some great ideas which I had never thought of. I was working mostly in isolation and, not yet being on the DD keyring, I thought it best just to lurk for a while, continuing to work on the debram. I did not know you, after all. I had already done a lot of work on the debram. I did not know if you were serious. How could I know? Most people who post ideas on lists are not serious. Tagging the archive is a big project. I did not want to risk starting discussions with you if you might just go MIA six months later. Well. You guys are still here and I am pleased to observe that you seem to be 100 percent serious. This is a relief to me. The big heap of packages has tripled in size since the potato days, and it is still a BIG HEAP. This is surreal. It is also too big for me to handle alone. I am pleased and relieved to lace up my boots and join your army. However, we have a temporary but real problem. You started by defining tags to assign to packages. I started by sorting packages into piles then naming the piles. Your approach is smarter, but under my approach the work is nearly done. And the two approaches are apparently not mixing. In chemical terms, what we want is some detergent that makes debram soluble in debtags. We want debram to mix. > And also, how do you build the hierarchy? How > do you decide that, for example, Audio is > under "User oriented packages" but Graphics is > under X/X Applications/ ? Good question. Looking at it from the debram's perspective, can you see how it would happen this way? I did not design the hierarchy then sort the packages into it; I sorted the packages then built the hierarchy around them. From this perspective, [1800 X] emerges as a natural division of the archive. The [1900 Audio] emerges as a natural division, too, but of a different character because its various contents have a unifying theme but lack a mutual set of dependencies. I didn't design it this way; this is just how Debian has grown up. In general, the more Maintainers were working on a particular kind of package or the more fundamental the kind of package seemed to general Debian operation, the more prominent a place that kind of package earned in the tree. Packages with similar purposes, similar audiences and/or similar dependencies tend to go together; but whether the purpose, the audience or the dependency is the dominant consideration varies over the hierarchy: sorting considerations which work well in [1300 Programming], for example, may not work so well for [1800 X]. No geometrical precision is possible in this. The biggest single problem with the debram is with some packages which strongly naturally belong in each of two different branches. For various reasons, I wanted (and still want) each package to have a single principal home on the tree, but for some packages this approach has created real problems. The problems are particularly acute within 1580 CJK (Chinese/Japanese/Korean), 1716 SGML / XML, 1720 Mathematics, 8151 Kernel Control and Management of Central Hardware, and a few others. The debtags solve this problem, and do it in a way which does not fundamentally require us to give up debram's gains in this area. ... debram-2.0.0.4/docdata/cmdsel.txt0000644000000000000000000042130712523712522013412 0ustar ======================================================================== COMMAND SELECTION GUIDE ======================================================================== Thaddeus H. Black Version 2.0.0, 9 May 2015 A modern GNU/Linux system has hundreds or even daunting thousands of available commands. This Guide introduces and ramifies the commands which seem to the author most significant and common. If you know what you want your computer to do, but do not yet know the right command to give, you can find the command here. ------------------------------------------------------------------------ RAMIFICATION AND TABLE OF CONTENTS ------------------------------------------------------------------------ Overview and Application Scope Construction and Use THE COMMANDS 0100 BASH SHELL BUILTINS 0110 Bash Directory Specification 0120 Bash Parameter Handling and Variable Control 0130 Bash Environment Management 0140 Bash Job Control 0150 Bash Command-line Control 0160 Bash Shell Control 0170 Bash Flow Control 0180 Bash Condition Testing and Expression Evaluation 0190 Other Bash Shell Builtins 0200 BASH SHELL ELEMENTS AND OPERATORS 0210 Keypresses 0211 General Keys 0212 Basic Shell Keys 0213 Advanced Shell Keys 0214 Shell Word Keys 0215 Shell Expansion Keys 0216 Shell History Keys 0218 Console Keys 0220 Special Shell and Environment Variables 0221 Directory Variables 0222 Command-line Parameters 0223 Process Variables 0224 UID Variables 0229 Other Special Shell and Environment Variables 0230 Bash Variable Handling 0240 Bash Jobspecs 0250 Bash Text Expansion 0251 Bash Quoting 0252 Advanced Bash Quoting 0253 Bash Character Escapes 0254 Bash Pattern Matching 0255 Bash Pathname Expansion 0270 Bash Flow-control and Redirection 0271 Bash Flow-control Operators 0272 Bash Redirection 0280 Bash Tests 0281 Bash File Tests (see the test builtin) 0282 Bash String Tests (see the test builtin) 0290 Other Bash Shell Elements and Operators **** Examples Illustrating Bash's Flow-control Builtins 1000 USER COMMANDS 1010 Shell Invocation and Related Commands 1020 Unbuiltins 1100 General Commands 1110 File Commands 1111 General File Commands 1112 File Listing and Finding 1113 Symbolic Linking 1114 Directories 1115 File Moving and Naming 1116 File Copying 1120 Text Commands 1121 General Text Commands 1122 Text Scanning 1123 Text Filtering 1124 Text Formatting 1125 Text Sorting 1126 Text Comparison 1127 Misc Text Commands 1128 Internationalization, Localization and Unicode 1129 Byte Handling 1180 Date and Time 1181 General Date and Time 1185 Calendars 1190 Other General Commands 1194 Number and Sequence Commands 1197 Further General Commands 1200 Basic Tools 1210 Compression, Archival and Backup 1211 General Compression, Archival and Backup 1213 Gzip 1214 Bzip2 1216 Shar and Uuencode 1220 Tasking 1221 Execution Scheduling 1222 File Locking 1223 Kill and Nice 1224 Process Listing 1227 Other Tasking 1240 Pagers, Documentation Tools and Text Editors 1241 Man and Info 1242 Pagers 1243 Dictionaries and Other Natural-language Tools 1244 Vi 1246 Other Text Editors 1247 Other Documentation Tools 1250 Console and TTY 1251 Login 1252 Console 1253 Console Keyboard 1254 Console Characters 1255 TTY 1258 Screen-oriented Text I/O 1270 Other Basic Tools 1276 Gettext 1277 Further Basic Tools 1300 Programming 1310 Programming Foundation 1311 C 1312 C++ 1313 Linking 1314 Assembly 1315 Make 1317 Library Handling 1318 Debugging 1319 Other Programming Foundation 1320 Lexing and Parsing 1350 Dbus 1360 Interpreters 1380 Revision Control 1390 Autotools 1400 General Administration (User Commands) 1420 User ID (User Commands) 1440 Filesystems and Disks (User Commands) 1450 The Kernel (User Commands) 1451 The Kernel and Central Hardware (User Commands) 1455 System Resources (User Commands) 1460 User Accounts (User Commands) 1461 Own User Account (User Commands) 1465 Other User Accounts (User Commands) 1470 Debian Packaging and Development (User Commands) 1471 Debtags (User Commands) 1472 Other Deb Scanning and Finding (User Commands) 1473 Dpkg (User Commands) 1474 APT (User Commands) 1475 Debian Package Development (User Commands) 1476 Official Debian CD Building (User Commands) 1490 Other General Administration (User Commands) 1600 Networking (User Commands) 1610 TCP/IP (User Commands) 1611 General TCP/IP (User Commands) 1615 Sockets (User Commands) 1616 TCP/IP Monitoring and Diagnostics (User Commands) 1620 Other Network Foundation (User Commands) 1622 DNS (User Commands) 1624 LDAP (User Commands) 1627 Further Network Foundation (User Commands) 1640 Network Clients 1641 General Network Clients 1642 FTP 1644 Telnet, Rsh and Ssh 1645 Mail 1646 Messaging 1647 Web 1700 Other 1710 Printing 1711 Print Dispatch and Basic Printing 1714 PDF 1718 Fonts 1720 Markup 1725 TeX 1726 XML/SGML 1727 Groff and Other Markup 1740 Image Filtration and Handling 1750 Mathematics, Physical Science and Cryptography 1751 Mathematics and Physical Science 1759 Random Numbers and Cryptography 1770 Further User Commands 1800 X 1810 X Foundation 1820 Basic X 1821 General Basic X 1822 X TTY 1824 X Fonts and Image Handling 1830 X Programming 1900 Audio 4000 DEVICES 4100 General Devices 4200 Console and TTY Devices 4400 Disk and Storage Devices 4700 Other Devices 4800 X Video Devices 5000 FILE FORMATS 5100 General and Documentation File Formats 5110 General File Formats 5140 Documentation and Natural-language File Formats 5160 Groff File Formats 5200 TTY- and Console-related File Formats 5300 Programming File Formats 5400 Administrative File Formats 5410 Boot-control File Formats 5420 User-ID File Formats 5430 Process-control File Formats 5440 Filesystem-control File Formats 5450 Kernel-interface File Formats 5460 User-account Administration File Formats 5461 General User-account Administration File Formats 5462 User-account Creation and Limitation File Formats 5470 Debian File Formats 5490 Other System-configuration File Formats 5600 Networking File Formats 5610 General Networking File Formats 5620 DNS File Formats 5640 Configuration of Network Clients and Servers 5650 Mail File Formats 5700 Other File Formats 5730 Printservice Configuration File Formats 5740 Image Formats 5770 Further File Formats 5800 X-configuration File Formats 7000 CONVENTIONS AND MISCELLANY 7100 System Conventions and Miscellany 7200 Character-set Conventions and Miscellany 7300 Groff Conventions and Miscellany 7400 Debian Conventions and Miscellany 7600 Network Conventions and Miscellany 7610 Basic TCP/IP Conventions and Miscellany 7670 Further Network Conventions and Miscellany 7700 Other Conventions and Miscellany 7710 General Conventions and Miscellany 7770 Further Conventions and Miscellany 7800 X Conventions and Miscellany 8000 ADMINISTRATIVE AND PRIVILEGED COMMANDS 8100 General Administration 8110 Booting and OS Installation 8111 Init 8112 OS Installation 8117 Other Booting 8120 User ID 8130 Process Administration 8140 Filesystems and Disks 8141 Filesystem Mounting and General Control 8142 Filesystem Creation and Maintenance 8143 CD-ROMs 8148 Hard-disk Partitioning and Device Control 8150 The Kernel 8151 Kernel Control and Management of Central Hardware 8152 Kernel-module Control 8156 Kernel Tuning 8158 Expansion Busses and IRQs 8160 User Accounts 8161 General User-account Administration 8162 Creation and Limitation of User Accounts 8180 Console Control 8190 Other General Administration 8191 The Linker and Chroot 8193 Administrative Logging 8194 Man Administration 8196 Printer Administration 8197 Further General Administration 8198 Time-zone Administration 8200 Debian Installation, Packaging and Development 8210 Deb Installation 8211 Dpkg 8212 APT 8217 Other Deb Installation 8250 Debian Packaging and Development 8500 General Services 8600 Network Administration and Services 8610 Network Administration 8611 Network Interface Control 8612 Routing and Firewalling 8614 ICMP, Ping and Traceroute 8616 TCP/IP Monitoring and Diagnostics 8620 Other Network Administration 8640 Network Services How To Learn More about a Specific Command How To Install a Missing Command How To Find Other Commands The Ramification Numbering System Work Still Needed Document History Acknowledgments About the Author Copyleft ------------------------------------------------------------------------ OVERVIEW AND APPLICATION In English, commands consist of imperatives like "Wash the dishes!", "Come here!" and "Stop!" A computer running GNU/Linux does not understand such natural-language verbs as "wash", "come" and "stop", of course; but it does recognize its own powerful vocabulary of verbs, verbs like ls(1), cp(1) and rm(1). To run GNU/Linux effectively you must know the verbs. The Command Selection Guide identifies and ramifies several hundred of the most important GNU/Linux commands, the basic verbs of GNU/Linux. The user who wants to speak the language fluently will learn many or most of the commands listed here. This Guide imparts the essential imperative vocabulary of GNU/Linux. The author has written the Guide with reference to Debian GNU/Linux. (Debian plays such a foundational role in the open-source software world that for general vendor neutrality there seems no other obvious choice.) Nevertheless, most of the useful commands this Guide covers are found on most GNU/Linux systems everywhere---many of them are even found on most Unix-type systems everywhere---and the basic commands don't change much over time. The Guide thus has general application. The Guide covers few recent commands, but mostly proven commands which have been in broad use since 2004 and earlier. It has received minimal attention since 2006. SCOPE The number of specialized, obscure or unproven commands found on (or installable onto) a typical GNU/Linux system is bewilderingly large. This Guide purposely limits its focus to well established commands of general interest. The author has applied his own experience and best subjective judgment in the matter. Conspicuously missing from the Guide are hundreds of possible additional entries for X, graphics, sound and network service. The Guide, quite lengthy enough, does seek to obtain some useful degree of brevity; thus the exclusions. It has however also a philosophical reason for many of the exclusions: namely that, when properly organized and used, GNU/Linux is at heart a text-driven system; the graphics and sound are extra. A beginning or intermediate user who wishes to grow into a GNU/Linux expert would be well served to learn thoroughly first the text-driven core of the system treated here. To obtain a more complete, less selective listing of available commands, see the section "How To Find Other Commands" at the end of the Guide. CONSTRUCTION AND USE Grouping related commands together for common reference as a university library groups related books, this Guide ramifies GNU/Linux commands as the now obsolete debram(1) once ramified Debian packages, numbering the branches in a parallel way. By such construction the Guide ameliorates several problems for the user, including the problem of the one-way manpage "See Also": where tree(1) refers to ls(1), for instance, while ls(1) fails to refer to the newer tree(1). Besides the commands proper (as in man sections 1 and 8), the Guide also includes the devices (4), configuration files (5), and conventions and miscellany (7) that have manpages and seem most significant and common. It excludes system calls (2), library functions (3), and games (6). The command descriptions, limited here to 49 characters, are very brief. To learn more than the one-line summary the Guide gives each command, you can type "man n command" (where n is the man section number 1, 4, 5, 7 or 8) or see the section "How To Learn More about a Specific Command" at the end of the Guide. ------------------------------------------------------------------------ THE COMMANDS ------------------------------------------------------------------------ 0110 BASH DIRECTORY SPECIFICATION ------------------------------------------------------------------------ pwd [builtin] - print the name of the current working directory cd [builtin] - change the current working directory pushd [builtin] - add a directory to the top of the directory stack popd [builtin] - remove an entry from the directory stack dirs [builtin] - display the list of currently remembered dirs ------------------------------------------------------------------------ 0120 BASH PARAMETER HANDLING AND VARIABLE CONTROL ------------------------------------------------------------------------ shift [builtin] - shift $2 to $1, $3 to $2, etc, discarding $1 getopts [builtin] - parse positional parameters declare [builtin] - declare a variable and/or give it an attribute readonly [builtin] - protect a variable from subsequent assignment local [builtin] - create a variable local to a function ------------------------------------------------------------------------ 0130 BASH ENVIRONMENT MANAGEMENT ------------------------------------------------------------------------ export [builtin] - prepare the environments of subsequent commands umask [builtin] - set the user file-creation mask unset [builtin] - remove the specified variable (or function) ------------------------------------------------------------------------ 0140 BASH JOB CONTROL ------------------------------------------------------------------------ % [builtin] - resume a stopped or background job bg [builtin] - place the specified job in the background fg [builtin] - place the specified job in the foreground jobs [builtin] - list the active jobs kill [builtin] - send the proc or job named the signal specified wait [builtin] - wait for the given proc; report its exit status disown [builtin] - remove a job from the table of active jobs time [builtin] - run programs and summarize system resource usage times [builtin] - print a job's user- and system-time usage ulimit [builtin] - control resources avail to procs the shell starts ------------------------------------------------------------------------ 0150 BASH COMMAND-LINE CONTROL ------------------------------------------------------------------------ type [builtin] - indicate how the given name would be interpreted alias [builtin] - define a command alias unalias [builtin] - remove the specified names from the alias list set -o vi [builtin] - use vi-style cmd line; `set -o emacs' countrmands history [builtin] - display the history list with line numbers ------------------------------------------------------------------------ 0160 BASH SHELL CONTROL ------------------------------------------------------------------------ set [builtin] - set shell flags set -e [builtin] - exit on an error; `set +e' countermands logout [builtin] - log out of a login shell (shortcut: ^D) exit [builtin] - exit the shell exec [builtin] - replace this shell with the specified program shopt [builtin] - toggle variables controlling optional behavior suspend [builtin] - suspend the execution of this shell until SIGCONT trap [builtin] - execute command when shell rcvs the given signal ------------------------------------------------------------------------ 0170 BASH FLOW CONTROL ------------------------------------------------------------------------ if [builtin] - execute if exit status is zero case [builtin] - selectively execute commands for [builtin] - execute commands for each member in a list while [builtin] - execute while zero exit status until [builtin] - execute until zero exit status continue [builtin] - resume the next iteration of the enclosing loop break [builtin] - exit from within a for, while or until loop function [builtin] - create a simple command return [builtin] - exit a function with the return value specified ------------------------------------------------------------------------ 0180 BASH CONDITION TESTING AND EXPRESSION EVALUATION ------------------------------------------------------------------------ [] [builtin] - check file types & compare vals (same as `test') [[]] [builtin] - chain several `[]' tests, using C-style syntax (()) [builtin] - evaluate arithmetically (same as `let') test [builtin] - check file types and compare values let [builtin] - evaluate arithmetically true [builtin] - return a successful result false [builtin] - return an unsuccessful result ------------------------------------------------------------------------ 0190 OTHER BASH SHELL BUILTINS ------------------------------------------------------------------------ : [builtin] - do nothing; this builtin has no effect . [builtin] - read and exec in current env (same as `source') source [builtin] - read and execute commands in the current environ echo [builtin] - display a line of text printf [builtin] - format and print (see also printf(3)) read [builtin] - pause until the user presses enter help [builtin] - display helpful info about builtin commands ------------------------------------------------------------------------ 0211 GENERAL KEYS ------------------------------------------------------------------------ ^J - '\n' newline: end and accept line (^J is Ctrl-J) ^M - '\r' carriage return (usually deprecated; see ^J) ^H - '\b' delete the character before the cursor ^D - end input or log out ^C - interrupt ^\ - quit (but try ^C first) ^Z - suspend - toggle: type letters capital by default - toggle: pause and unpause terminal I/O ------------------------------------------------------------------------ 0212 BASIC SHELL KEYS ------------------------------------------------------------------------ ^L - '\f' clear or redraw the screen ^D - delete the character under the cursor ^B , ^F - move left (backwd) or right (forwd) a character ^A , ^E - move to the start or end of the line ^U ^X - kill text backward to the start of the line ^Y - yank text killed by ^U or ^W (but not ^X) ^K - kill text forward to the end of the line ^V - accept verbatim the next character typed ^V - type a real '\t' tab ------------------------------------------------------------------------ 0213 ADVANCED SHELL KEYS ------------------------------------------------------------------------ ^G - '\a' ring the bell ^T - transpose characters ^S, ^Q - turn on and off ^@ Alt- - mark the cursor point ^X^X - go to the mark (swap the point and the mark) ^_ - undo Alt-R - revert: undo all ^], Alt-^] - search forward or backward for a character Alt-^Y - yank the previous command's first argument Alt-n-^Y - yank the previous command's nth argument Alt-. Alt-_ - yank the previous command's last argument ^X(, ^X) - start and end the definition of a keyboard macro ^Xe - execute the keyboard macro ------------------------------------------------------------------------ 0214 SHELL WORD KEYS ------------------------------------------------------------------------ Alt-B, Alt-F - move backward or forward a word ^W Alt-, Alt-D - delete the word before or after the cursor Alt-\ - delete all spaces and tabs around the cursor Alt-T - transpose words ------------------------------------------------------------------------ 0215 SHELL EXPANSION KEYS ------------------------------------------------------------------------ ^I - '\t' complete the word automatically Alt-*, Alt-? - insert or list all possible word completions Alt-/, ^X/ - complete the filename or list poss completions Alt-!, ^X! - complete the command or list possible completions Alt-^E - expand the entire command line immediately ------------------------------------------------------------------------ 0216 SHELL HISTORY KEYS ------------------------------------------------------------------------ Alt- - complete the line according to the history ^P - fetch the previous command from the history ^N - fetch the next command from the history ^O - accept the line and fetch the next from history Alt-<, Alt-> - move to the start or end of the history ^R - search the history ------------------------------------------------------------------------ 0218 CONSOLE KEYS ------------------------------------------------------------------------ Alt-^ - control-alt-delete: shut down (see inittab(5)) Sh-, Sh- - scroll backward or forward LAlt-nnn - (enter a char's decimal ascii code on the keypad) RAlt-xx - (same, but hex: 0123456789/*-+) LAlt- - go to virtual console n (1 <= n <= 6) LAlt-, - - go the the previous or next virtual console LAlt- - go to X(7) LAlt-^ - return from X(7) to virtual console n LAlt-^ - shut X(7) down ------------------------------------------------------------------------ 0221 DIRECTORY VARIABLES ------------------------------------------------------------------------ $PWD [shell] - the present working directory $OLDPWD [shell] - the previous working directory $HOME [shell] - the user's home directory $PATH [shell] - the search path for commands ${DIRSTACK[*]} - the directory stack ------------------------------------------------------------------------ 0222 COMMAND-LINE PARAMETERS ------------------------------------------------------------------------ $0 [shell] - the name by which the shell script was invoked $1 $2 ... [shell] - positional parameters given by parent to shell $* [shell] - $1 $2 ... $# [shell] - the number of positional parameters remaining $OPTIND [shell] - the position of the next potential cmd-line opt $OPTARG [shell] - the argument to a command-line option ------------------------------------------------------------------------ 0223 PROCESS VARIABLES ------------------------------------------------------------------------ $? [shell] - the last command's exit status $! [shell] - the last background command's process ID $$ [shell] - the shell's process ID $PPID [shell] - the shell's parent's process ID ${PIPESTATUS[*]} - the exit status of each of the cmds in a pipeline ------------------------------------------------------------------------ 0224 UID VARIABLES ------------------------------------------------------------------------ $UID [shell] - the user ID $EUID [shell] - the effective user ID $USER [shell] - the user's username $HOSTNAME [shell] - the computer's name ------------------------------------------------------------------------ 0229 OTHER SPECIAL SHELL AND ENVIRONMENT VARIABLES ------------------------------------------------------------------------ $LC_ALL [shell] - the locale (LC_ALL=C implies the default locale) $PS1 [shell] - string controlling the cmd prompt's appearance $PS2 [shell] - string controlling the secondary prompt $SHLVL [shell] - shell level, incremented each time bash is nested $COLUMNS [shell] - how many columns of the display to use $LINES [shell] - how many lines of the display to use $RANDOM [shell] - a random integer between 0 and 32768 ------------------------------------------------------------------------ 0230 BASH VARIABLE HANDLING ------------------------------------------------------------------------ $var [shell] - evaluate the variable ${var} [shell] - evaluate the variable (careful syntax) ${var:-text} [shell] - evaluate the variable; return text if empty ${var:=text} [shell] - evaluate the variable; assign text if empty ${var[n]} [shell] - evaluate the nth element of the array (n >= 0) ${var[*]} [shell] - evaluate the whole array ${#var[*]} [shell] - return the number of elements in the array var=text [shell] - store the text in the variable var[n]=text [shell] - store the text in the nth element of the array var=(t0 t1) [shell] - set the whole array at once ------------------------------------------------------------------------ 0240 BASH JOBSPECS ------------------------------------------------------------------------ %+ %% % [shell] - the current job %- [shell] - the previous job %n [shell] - job number n %jobname [shell] - the named job ------------------------------------------------------------------------ 0251 BASH QUOTING ------------------------------------------------------------------------ "text" [shell] - accept the enclosed text with interpolation 'text' [shell] - accept the enclosed text verbatim $'text' [shell] - accept the enclosed text, honoring escapes $( cmd ) [shell] - accept the text the enclosed command produces ` cmd ` [shell] - (same as $( cmd )) \char [shell] - accept the character literally ------------------------------------------------------------------------ 0252 ADVANCED BASH QUOTING ------------------------------------------------------------------------ $(< file ) [shell] - accept text from the file $(( expr )) [shell] - accept the evaluation of the arithmetic expressn <( cmd ) [shell] - send cmd's output to a named pipe; accpt the name <= 0) ~ [shell] - the user's home directory (see also $HOME) ~user [shell] - the named user's home directory ------------------------------------------------------------------------ 0271 BASH FLOW-CONTROL OPERATORS ------------------------------------------------------------------------ cmd ; [shell] - syntactically terminate the command cmd1 ; cmd2 [shell] - run the commands in sequence cmd1 | cmd2 [shell] - pipe one cmd's stdout directly to another's stdin cmd1 && cmd2 [shell] - run cmd2 if and only if cmd1 succeeds cmd1 || cmd2 [shell] - run cmd2 if and only if cmd1 fails ! cmd [shell] - logically invert the command's exit status { cmd ; } [shell] - run the enclosed command in the current environ { c1 ; c2 ;} [shell] - run the enclosed cmds as a single cmd ( cmd ) [shell] - run the enclosed command in a subshell ( c1 ; c2 ) [shell] - run the enclosed cmds in subshell as a single cmd cmd & [shell] - run the command in the background cmd1 & cmd2 [shell] - start cmd1 in the bkgnd, then immediatly run cmd2 cmd & disown [shell] - run the command independently, immune to logout ------------------------------------------------------------------------ 0272 BASH REDIRECTION ------------------------------------------------------------------------ < file [shell] - let the named file provide stdin > file [shell] - redirect stdout to the named file >> file [shell] - append stdout to the named file 2> file [shell] - redirect stderr to the named file 2>> file [shell] - append stderr to the named file &> file [shell] - redirect both stdout and stderr to the named file &>> file [shell] - append both stdout and stderr to the named file 1>&2 [shell] - redirect stdout to stderr 2>&1 [shell] - redirect stderr to stdout ------------------------------------------------------------------------ 0281 BASH FILE TESTS (SEE THE TEST BUILTIN) ------------------------------------------------------------------------ -e file [shell] - true if file exists -f file [shell] - true if file exists and is a regular file -d file [shell] - true if file exists and is a directory -p file [shell] - true if file exists and is a named pipe -h file [shell] - true if file is a symbolic link -O file [shell] - true if file exists and is yours -r file [shell] - true if file exists and is readable -w file [shell] - true if file exists and is writable -x file [shell] - true if file exists and is executable f1 -ot f2 [shell] - true if file 1 is older than file 2 f1 -nt f2 [shell] - true if file 1 is newer than file 2 ------------------------------------------------------------------------ 0282 BASH STRING TESTS (SEE THE TEST BUILTIN) ------------------------------------------------------------------------ -n text [shell] - true if text has non-zero length -z text [shell] - true if text has zero length t1 == t2 [shell] - true if text1 and text2 are the same t1 != t2 [shell] - true if text1 and text2 differ ------------------------------------------------------------------------ 0290 OTHER BASH SHELL ELEMENTS AND OPERATORS ------------------------------------------------------------------------ # comment [shell] - let the shell ignore the comment \ [shell] - continue this line on the next line var=text cmd [shell] - run cmd with var=text in its local environment LC_ALL=C cmd [shell] - run cmd in the default locale ------------------------------------------------------------------------ EXAMPLES ILLUSTRATING BASH'S FLOW-CONTROL BUILTINS ------------------------------------------------------------------------ The several examples which follow suffice to illustrate the use of the shell's important `if', `case', `for', `while', `until' and `function' flow-control builtins. Take some time to study the examples; even try them if needed or desired. Until you understand these basic examples, you probably will not be able to understand much of what goes on when you use GNU/Linux. (The examples mostly control the `echo' builtin, but this is just for illustration. You can give any command or series of commands you want in place of the `echo'.) -------------------- IF -------------------- The shell command if [ $A == foo ] ; then echo oof ; elif [ $A == bar ] ; then echo rab ; elif [ $A == baz ] ; then echo zab ; else echo nile ; fi prints oof if $A is "foo"; prints rab if $A is "bar"; prints zab if $A is "baz"; and prints nile if $A is anything else. (To assign "foo" to $A before giving the `if' command, first give the command "A=foo".) -------------------- CASE -------------------- The shell command case $A in foo | bar ) echo barfoo ;; eb?z* ) echo ebozbarren ; echo baz ;; * ) echo default ;; esac prints barfoo if $A is "foo" or "bar"; prints ebozbarren baz if $A is "ebozbar", "ebazzy", or something similar; and prints default if $A is anything else. -------------------- FOR -------------------- The shell command for X in foo bar baz ; do echo X is ; echo $X ; done prints X is foo X is bar X is baz -------------------- WHILE AND UNTIL -------------------- The shell group command { rm -rf /tmp/foo # ensure that no /tmp/foo exists until echo bar ; test -f /tmp/foo ; do echo baz ; touch /tmp/foo ; echo qux ; done echo oooo while echo rab ; test -f /tmp/foo ; do echo zab ; rm /tmp/foo ; echo xuq ; done } prints bar baz qux bar oooo rab zab xuq rab Notice that the `while' cycles until the command before its `do' fails but the `until' cycles until the command before its `do' succeeds. The command happens to be "test -f /tmp/foo" in the example, but in general it could be any GNU/Linux command. When a GNU/Linux command fails, incidentally, it returns 1 or some other "exit status" besides 0; when it succeeds, it returns 0 (which is exactly opposite the way C/C++ operators work). The shell does not normally clutter the screen by showing you these exit-status numbers: to view the last command's exit status, therefore, enter "echo $?". -------------------- FUNCTION -------------------- The shell command foo() { echo the third positional parameter is $3 echo the first positional parameter is $1 echo the positional parameters are $* } defines a new shell function named `foo'. After defining `foo', the shell command foo bar baz qux rux prints the third positional parameter is qux the first positional parameter is bar the positional parameters are bar baz qux rux ------------------------------------------------------------------------ 1010 SHELL INVOCATION AND RELATED COMMANDS ------------------------------------------------------------------------ bash (1) - run the Bourne-Again SHell bash -e (1) - bash(1), but exit on an error rbash (1) - bash(1), restricted sh (1) - bash(1), almost as a basic POSIX shell dash (1) - run the basic POSIX shell tcsh, csh (1) - run the Tenex C SHell getopt (1) - parse command options (enhanced) ------------------------------------------------------------------------ 1020 UNBUILTINS ------------------------------------------------------------------------ /bin/true (1) - do nothing, successfully /bin/false (1) - do nothing, unsuccessfully /bin/echo (1) - display a line of text (unbuiltin) /bin/kill (1) - signal a process /bin/pwd (1) - print the name of the working dir (unbuiltin) /usr/bin/test (1) - check file types and compare values (unbuiltin) /usr/bin/printf (1) - format and print data /usr/bin/time (1) - run programs and summarize resource usage (unblt) ------------------------------------------------------------------------ 1111 GENERAL FILE COMMANDS ------------------------------------------------------------------------ touch (1) - change file timestamps newer (1) - compare file modification times chmod (1) - change file access permissions access (1) - determine whether a file can be accessed stat (1) - display file or filesystem status mkfifo (1) - make FIFOs (named pipes) file (1) - determine file type ------------------------------------------------------------------------ 1112 FILE LISTING AND FINDING ------------------------------------------------------------------------ find (1) - search for files in a directory hierarchy ls (1) - list directory contents dir (1) - briefly ls(1) vdir (1) - verbosely ls(1) dircolors (1) - set up colors for ls(1) limo, li (1) - LIst files with Many Options tree (1) - list directories in a tree-like format which (1) - locate a command whereis (1) - locate a command's binary, source and manpage locate (1) - locate a file by looking it up in the filename db ------------------------------------------------------------------------ 1113 SYMBOLIC LINKING ------------------------------------------------------------------------ ln (1) - make links between files mln (1) - link multiple files by wildcard pattern link (1) - call the link function to create a link to a file readlink (1) - display the target of a symbolic link namei (1) - follow a symlink trail to its terminal point chase (1) - chase symbolic links symlinks (1) - maintain symbolic links ------------------------------------------------------------------------ 1114 DIRECTORIES ------------------------------------------------------------------------ mkdir (1) - make directories rmdir (1) - remove empty directories dirname (1) - strip the non-directory suffix from a filename basename (1) - strip the directory and suffix from a filename realpath (1) - return the canonicalized absolute pathname mirrordir (1) - copy directory trees via a minimal set of changes dirsplit (1) - split a directory into multiple with equal size ------------------------------------------------------------------------ 1115 FILE MOVING AND NAMING ------------------------------------------------------------------------ rm (1) - remove files or directories unlink (1) - call the unlink function to remove a file mv (1) - move (rename) files mmv (1) - move multiple files by wildcard pattern pathchk (1) - check whether file names are valid or portable ------------------------------------------------------------------------ 1116 FILE COPYING ------------------------------------------------------------------------ cp (1) - copy files and directories mcp (1) - copy multiple files by wildcard pattern mad (1) - append multiple files by wildcard pattern install (1) - copy files and set attributes dd (1) - convert and copy a file sdd (1) - dd(1) with reblocking cstream (1) - dd(1) with traditional syntax and bandwdth limits cpbk (1) - mirror and back up your files ------------------------------------------------------------------------ 1121 GENERAL TEXT COMMANDS ------------------------------------------------------------------------ cat (1) - concatenate files and print on standard output dog (1) - cat(1), improved head (1) - output the first parts of files tail (1) - output the last parts of files line (1) - read one line tac (1) - concatenate and print files in reverse rev (1) - reverse each line of a file tee (1) - read from stdin, write to stdout and to files multitee (1) - send multiple inputs to multiple outputs xtail (1) - watch the growth of files since (1) - display the tail a file has gaind since last time split (1) - split a file into pieces safecat (1) - safely write data to a file ------------------------------------------------------------------------ 1122 TEXT SCANNING ------------------------------------------------------------------------ wc (1) - count the bytes, words and lines in files wc -L (1) - print the length of the longest line grep (1) - print lines matching a pattern egrep (1) - grep(1) using extended regexes rgrep (1) - grep(1), scanning directories recursively pcregrep (1) - grep(1) using perl(1)-compatible regexes sgrep (1) - search a file for a structured pattern look (1) - display lines beginning with a given string pv (1) - monitor the progress of data through a pipe ------------------------------------------------------------------------ 1123 TEXT FILTERING ------------------------------------------------------------------------ sed (1) - edit in stream expand, unexpand (1) - convert tabs to spaces, or the reverse tr (1) - translate or delete characters colrm (1) - remove columns from a file csplit (1) - split a file into sections by context lines cut (1) - remove sections from each line of files paste (1) - merge lines of files join (1) - join lines of two files on a common field mawk, awk (1) - scan patterns and process text ------------------------------------------------------------------------ 1124 TEXT FORMATTING ------------------------------------------------------------------------ nl (1) - number a file's lines pr (1) - convert text files for printing column (1) - columnate lists fold (1) - wrap each input line to fit in a specified width fmt (1) - format text simply and optimally par (1) - reformat paragraphs indent (1) - reformat a C program to a desired style banner (1) - print a large banner ------------------------------------------------------------------------ 1125 TEXT SORTING ------------------------------------------------------------------------ uniq (1) - remove duplicate lines from a sorted file sort (1) - sort lines of text files rl (1) - randomize lines tsort (1) - sort topologically ptx (1) - produce a permuted index of file contents ------------------------------------------------------------------------ 1126 TEXT COMPARISON ------------------------------------------------------------------------ comm (1) - compare two sorted files line by line cmp (1) - compare two files byte by byte diff (1) - compare two files line by line patch (1) - apply a diff(1) file to an original diff3 (1) - compare three files line by line merge (1) - merge three files lsdiff (1) - show which files a patch modifies splitdiff (1) - separate out incremental patches combinediff (1) - combine two incremental patches filterdiff (1) - extract or exclude diffs from a diff file interdiff (1) - show the differences between two diff files rediff (1) - fix offsets and counts of a hand-edited diff grepdiff (1) - show files modified by a diff containing a regex sdiff (1) - diff(1), showing differences side-by-side wdiff (1) - display word differences between text files quilt (1) - manage series of patches ------------------------------------------------------------------------ 1127 MISC TEXT COMMANDS ------------------------------------------------------------------------ i, iprint (1) - display a string's ascii codes, or the reverse flip (1) - convert between "\n" and "\r\n" newlines ------------------------------------------------------------------------ 1128 INTERNATIONALIZATION, LOCALIZATION AND UNICODE ------------------------------------------------------------------------ locale (1) - get locale-specific information localedef (1) - compile locale definition files iconv (1) - convert from one character encoding to another unaccent (1) - remove accents from an input stream or a string recode (1) - convert files between various character sets ------------------------------------------------------------------------ 1129 BYTE HANDLING ------------------------------------------------------------------------ od (1) - dump files in octal and other formats hexdump (1) - dump as ascii, decimal, hexadecimal or octal hexcat (1) - dump hex xxd (1) - dump hex or do the reverse md5sum (1) - generate or check MD5 message digests md5sum.textutils (1) - compute and check MD5 message digest cksum (1) - checksum and count the bytes in a file sum (1) - checksum and count the blocks in a file sha1sum (1) - compute and check SHA1 message digest fdupes (1) - find duplicate files in a given set of dirs ------------------------------------------------------------------------ 1181 GENERAL DATE AND TIME ------------------------------------------------------------------------ date (1) - print or set the system date and time 822-date (1) - print the date and time in RFC822 format sleep (1) - delay for a specified amount of time sleepenh (1) - sleep(1), accurate in aggregate over several runs zdump (1) - print the current time in each named time zone tzselect (1) - view time zones datefudge (1) - pretend the system time is different ------------------------------------------------------------------------ 1185 CALENDARS ------------------------------------------------------------------------ cal (1) - display a calendar and the date of Easter gcal (1) - calculate and print calendars ccal (1) - display a colored calendar pal (1) - display a calendar with events leave (1) - remind you when you have to leave calendar (1) - remind you of the events you have scheduled today remind (1) - invoke this sophisticated reminder service rem (1) - remind(1) with a default reminder file ------------------------------------------------------------------------ 1194 NUMBER AND SEQUENCE COMMANDS ------------------------------------------------------------------------ seq (1) - print a sequence of numbers jot (1) - print sequential or random data expr (1) - evaluate expressions factor (1) - factor numbers ------------------------------------------------------------------------ 1197 FURTHER GENERAL COMMANDS ------------------------------------------------------------------------ printenv (1) - print all or part of the environment env (1) - run a program in a modified environment xargs (1) - build and execute command lines from stdin yes (1) - output a string repeatedly until killed buffer (1) - reblock fast bfr (1) - buffer a pipe 8-bit-clean, without blocking spell (1) - check spelling ispell (1) - check spelling interactively ------------------------------------------------------------------------ 1211 GENERAL COMPRESSION, ARCHIVAL AND BACKUP ------------------------------------------------------------------------ tar (1) - archive files in the .tar format tardy (1) - post-process tar(1) cpio (1) - copy files to and from archives afio (1) - manipulate archives and files ras (1) - archive redundantly lzop (1) - compress or expand files ------------------------------------------------------------------------ 1213 GZIP ------------------------------------------------------------------------ gzip (1) - compress files gunzip (1) - expand files zcat (1) - expand files to stdout zcmp (1) - compare compressed files with cmp(1) zdiff (1) - compare compressed files with diff(1) zgrep (1) - grep(1) possibly compressed files zegrep (1) - egrep(1) possibly compressed files zpcregrep (1) - zgrep(1) with Perl-compatible regular expressions gzexe (1) - compress executable files in place makeself (1) - generate self-extractable archives ------------------------------------------------------------------------ 1214 BZIP2 ------------------------------------------------------------------------ bzip2 (1) - compress files in the block-sorting .bz2 format bunzip2 (1) - decompress .bz2 files bzcat (1) - decompress .bz2 files to stdout bzcmp (1) - compare bzip2-compressed files with cmp(1) bzdiff (1) - compare bzip2-compressed files with diff(1) bzgrep (1) - grep(1) possibly bzip2-compressed files bzegrep (1) - egrep(1) possibly bzip2-compressed files bzip2recover (1) - recover data from damaged bzip2 files bzexe (1) - bz2-compress executable files in place ------------------------------------------------------------------------ 1216 SHAR AND UUENCODE ------------------------------------------------------------------------ shar (1) - create shell archives unshar (1) - unpack a shar file uuencode, uudecode - encode or decode a binary file uuenview, uudeview - encode or decode binary files makedist (1) - make a distribution kit ------------------------------------------------------------------------ 1221 EXECUTION SCHEDULING ------------------------------------------------------------------------ at (1) - queue jobs for later execution atq (1) - examine jobs for later execution atrm (1) - delete jobs for later execution batch (1) - execute commands when system load levels permit crontab (1) - execute scheduled commands timeout (1) - run a command with bounded time watch (1) - execute a program periodically, output fullscreen ------------------------------------------------------------------------ 1222 FILE LOCKING ------------------------------------------------------------------------ tempfile (1) - create a temporary file in a safe manner mktemp (1) - make a unique temporary file name lockfile (1) - conditionally create a semaphore file dotlockfile (1) - safely create, test and remove lockfiles lockfile-create (1) - (lockfile-progs) lock a given file lockfile-touch (1) - (lockfile-progs) touch the lock on a given file lockfile-remove (1) - (lockfile-progs) remove the lock on a given file uuidgen (1) - create a new universally unique identifier (UUID) ------------------------------------------------------------------------ 1223 KILL AND NICE ------------------------------------------------------------------------ pkill (1) - signal processes based on name and other attribs skill (1) - signal a process identified in one of sevral ways killall (1) - kill processes by name slay (1) - kill all processes belonging to a user nice (1) - run a program with a modified scheduling priority snice (1) - reprioritize a process renice (1) - alter the priorities of running processes taskset (1) - retrieve or set a process' CPU affinity chrt (1) - manipulate a process' real-time attributes loadwatch (1) - run a program when the machine is idle ------------------------------------------------------------------------ 1224 PROCESS LISTING ------------------------------------------------------------------------ ps (1) - report a snapshot of the current processes pgrep (1) - look up processes based on name and other attribs pstree (1) - display a tree of processes top (1) - rank the top processes by CPU loading, in real tm htop (1) - view processes interactively ------------------------------------------------------------------------ 1227 OTHER TASKING ------------------------------------------------------------------------ fuser (1) - identify processes using files or sockets nohup (1) - run a command immune to hangups, to a non-tty dtach (1) - run a command immune to hangups launchtool (1) - run a command, supervising its execution attachtty, detachtty - run an interactive program with I/O to a socket daemon (1) - turn other processes into daemons pmap (1) - report a process' memory map ------------------------------------------------------------------------ 1241 MAN AND INFO ------------------------------------------------------------------------ man (1) - display the on-line reference manuals whatis (1) - display manual-page descriptions apropos (1) - search the manual-page names and descriptions manpath (1) - determine the search path for manual pages zsoelim (1) - satisfy .so requests in roff input lexgrog (1) - parse header information in man pages col (1) - filter reverse line feeds from input col -b (1) - degroffify a man page to plain ascii ul (1) - do underlining info (1) - read Info documents (introduction) info-stnd (1) - read Info documents ------------------------------------------------------------------------ 1242 PAGERS ------------------------------------------------------------------------ more (1) - peruse files zmore (1) - more(1) compressed text bzmore (1) - more(1) bzip2-compressed text pg (1) - browse pagewise through text files less (1) - peruse files, allowing backward movement zless (1) - less(1) compressed text bzless (1) - less(1) bzip2-compressed text most (1) - browse or page through a text file sensible-pager (1) - run a sensible text pager ------------------------------------------------------------------------ 1243 DICTIONARIES AND OTHER NATURAL-LANGUAGE TOOLS ------------------------------------------------------------------------ dict (1) - look words up in dictionary databases wnintro (1) - (introduction to the WordNet commands) wn (1) - look words up in the WordNet lexical database rhyme (1) - display list of rhymes ------------------------------------------------------------------------ 1244 VI ------------------------------------------------------------------------ vim, vi (1) - edit text with this Vi IMproved view (1) - view text ex (1) - edit text line by line rvim, rview (1) - vim(1) or view(1), restricted evim, eview (1) - vim(1) or view(1), easy vimdiff (1) - vim(1) two or three versions of a file at once vimtutor (1) - run this vim(1) tutor nvi (1) - edit text with this classic Vi text editor nview (1) - view text (via nvi(1)) nex (1) - edit text line by line (via nvi(1)) ed (1) - edit text line by line, the old-fashioned way red (1) - ed(1), restricted ------------------------------------------------------------------------ 1246 OTHER TEXT EDITORS ------------------------------------------------------------------------ emacs (1) - edit text with this extensible display editor nano (1) - edit text with this small, friendly editor sensible-editor (1) - run a sensible text editor hexedit (1) - view and edit files in hexadecimal or in ascii ------------------------------------------------------------------------ 1247 OTHER DOCUMENTATION TOOLS ------------------------------------------------------------------------ ascii (1) - report character aliases dhelp (1) - access Debian online help iso3166 (1) - find ISO 3166 country codes bible (1) - look words and verses up in the King James Bible randverse (1) - display a randomly selected verse from scripture ------------------------------------------------------------------------ 1251 LOGIN ------------------------------------------------------------------------ login (1) - begin a session on the system vlock (1) - lock the virtual console away (1) - lock the terminal ------------------------------------------------------------------------ 1252 CONSOLE ------------------------------------------------------------------------ fgconsole (1) - print the number of the active virtual terminal chvt (1) - change to another virtual terminal openvt (1) - start a program on a new virtual terminal deallocvt (1) - deallocate unused virtual terminals screendump (1) - dump the contents of a virtual console to stdout vcstime (1) - show the time in the console's upper right corner ------------------------------------------------------------------------ 1253 CONSOLE KEYBOARD ------------------------------------------------------------------------ dumpkeys (1) - dump keyboard translation tables loadkeys (1) - load keyboard translation tables kbd_mode (1) - report or set the keyboard mode setleds (1) - set the keyboard leds setmetamode (1) - print or set the keyboard metakey handling showkey (1) - examine the scan- and keycodes the keyboard sends fix_bs_and_del (1) - fix a console's delete and backspace keys ------------------------------------------------------------------------ 1254 CONSOLE CHARACTERS ------------------------------------------------------------------------ unicode_start (1) - put the console in unicode mode unicode_stop (1) - return the console to 8-bit mode vt-is-UTF8 (1) - check whether current VT is in UTF8- or byte-mode psfaddtable (1) - add a unicode character table to a console font psfgettable (1) - extract the unicode char tabl from a console font psfstriptable (1) - remove the unicode char table from a console font charset (1) - set an ACM for use as one of the G0/G1 charsets font2psf (1) - convert a 256-character font to PSF format showcfont (1) - display all chars in the current screen font splitfont (1) - extract characters from an ISO-type font codepage (1) - extract a codepage from a .cpi file ------------------------------------------------------------------------ 1255 TTY ------------------------------------------------------------------------ tty (1) - print the name of the terminal connected to stdin clear (1) - clear the terminal screen tset (1) - initialize the terminal reset (1) - reset the terminal tput (1) - initialize a terminal or query terminfo database setterm (1) - set terminal attributes stty (1) - change and print terminal line settings tic (1) - compile terminfo entry descriptions tack (1) - check terminfo actions toe (1) - print the table of terminfo entries infocmp (1) - compare or print out terminfo descriptions script (1) - make a typescript of the terminal session screen (1) - emulate a VT100/ANSI terminal splitvt (1) - run two shells in a split window ------------------------------------------------------------------------ 1258 SCREEN-ORIENTED TEXT I/O ------------------------------------------------------------------------ whiptail (1) - display dialog boxes from shell scripts dialog (1) - display dialog boxes from shell scripts, enhanced ------------------------------------------------------------------------ 1276 GETTEXT ------------------------------------------------------------------------ gettext (1) - translate a message ngettext (1) - translate a message and choose plural form envsubst (1) - substitute environ vars in shell format strings gencat (1) - generate a message catalog msgcat (1) - combine several message catalogs msgconv (1) - convert character sets in a message catalog msggrep (1) - match patterns on a message catalog msgfilter (1) - edit translations of a message catalog msguniq (1) - unify duplicate translations in a message catalog msgcomm (1) - match two message catalogs msgcmp (1) - compare a message catalog and a template msgattrib (1) - match attribs in and manipulate a message catalog msgen (1) - create an English message catalog msgexec (1) - process translations of a message catalog msginit (1) - initialize a message catalog msgmerge (1) - merge a message catalog and a template msgfmt, msgunfmt (1) - compile a msg catalog to (or from) binary format ------------------------------------------------------------------------ 1277 FURTHER BASIC TOOLS ------------------------------------------------------------------------ chkdupexe (1) - find duplicate executables ------------------------------------------------------------------------ 1311 C ------------------------------------------------------------------------ gcc, cc (1) - compile C cpp (1) - preprocess C and C++ cproto (1) - generate C function prototypes ifnames (1) - extract cpp(1) conditionals from a set of files unifdef (1) - remove preprocessor conditionals from code rmccmt (1) - remove comments from C and C++ programs liwc (1) - (programs to manipulate C source code) cstr (1) - print out string literals in C source code ------------------------------------------------------------------------ 1312 C++ ------------------------------------------------------------------------ g++, c++ (1) - compile C++ c++filt (1) - demangle C++ symbols ccmtcnvt (1) - convert C++ comments to C comments ------------------------------------------------------------------------ 1313 LINKING ------------------------------------------------------------------------ ld (1) - combine object files and tie up symbol references nm (1) - list symbols from object files strip (1) - discard symbols from object files size (1) - list section sizes and total size objcopy (1) - copy and translate object files objdump (1) - display information from object files readelf (1) - display information about an ELF file lorder (1) - list dependencies among object files chrpath (1) - change the rpath or runpath in binaries strings (1) - list the strings of printable chars in a file elfsh (1) - play with executables, shared libs and reloc objs ------------------------------------------------------------------------ 1314 ASSEMBLY ------------------------------------------------------------------------ as (1) - assemble GNU assembly lang into machine language nasm (1) - assemble 80x86 with the Netwide Assembler ndisasm (1) - disassemble 80x86 binary files (see nasm(1)) ldrdf (1) - link RDOFF objects and libraries from rdflib(1) rdflib (1) - manage a library file for use with ldrdf(1) rdx (1) - load and execute an RDOFF object rdfdump (1) - dump an RDOFF object in human-readable form rdf2bin (1) - convert an RDOFF object file to a flat binary intel2gas (1) - convert between NASM and GNU assembly languages ------------------------------------------------------------------------ 1315 MAKE ------------------------------------------------------------------------ make (1) - maintain groups of programs fastdep (1) - generate C/C++ dependencies fast jam (1) - make(1) redux ------------------------------------------------------------------------ 1317 LIBRARY HANDLING ------------------------------------------------------------------------ ar (1) - archive subroutines to create a library ranlib (1) - generate an index to an ar(1) archive ldd (1) - print shared library dependencies dlltool (1) - create files needed to build and use DLLs ------------------------------------------------------------------------ 1318 DEBUGGING ------------------------------------------------------------------------ gdb (1) - debug a program by looking inside while it runs cgdb (1) - use this curses frontend to gdb(1) addr2line (1) - convert addresses into file names and line numbrs mtrace (1) - interpret output from MALLOC_TRACE catchsegv (1) - catch segmentation faults in programs gcov (1) - analyze a program to improve its efficiency gprof (1) - display call-graph profile data strace (1) - trace system calls and signals cflow (1) - print a function call hierarchy ------------------------------------------------------------------------ 1319 OTHER PROGRAMMING FOUNDATION ------------------------------------------------------------------------ compile_et (1) - compile a com_err table of error codes and msgs ------------------------------------------------------------------------ 1320 LEXING AND PARSING ------------------------------------------------------------------------ flex (1) - generate fast lexical analyzers (replaces lex(1)) bison (1) - generate parsers (replaces yacc(1)) ------------------------------------------------------------------------ 1350 DBUS ------------------------------------------------------------------------ dbus-daemon-1 (1) - run the message bus daemon dbus-launch (1) - start a message bus from a shell script dbus-send (1) - send a message to a message bus dbus-cleanup-sockets - clean up leftover sockets in a directory dbus-monitor (1) - print message-bus messages for debugging ------------------------------------------------------------------------ 1360 INTERPRETERS ------------------------------------------------------------------------ python (1) - apply this interpreted, interactv, OO prog lang perl (1) - apply the Practical Extraction & Report Language ------------------------------------------------------------------------ 1380 REVISION CONTROL ------------------------------------------------------------------------ rcsintro (1) - (introduction to RCS commands) ci (1) - check in RCS revisions co (1) - check out RCS revisions rcs (1) - change RCS file attributes rcsdiff (1) - compare RCS revisions rcsmerge (1) - merge RCS revisions rcsclean (1) - clean up working files rcsfreeze (1) - freeze a config of sources checked in under RCS rlog (1) - print log messages and other info about RCS files ident (1) - identify RCS keyword strings in files pat (1) - (patch generator tools) svn (1) - control revs with this advanced rev ctrl system ------------------------------------------------------------------------ 1390 AUTOTOOLS ------------------------------------------------------------------------ autoconf (1) - generate configuration scripts automake (1) - automatically create Makefile.in from Makefile.am libtool (1) - generate both static and shared libraries m4 (1) - apply this macro processor pkg-config (1) - return metainformation about installed libraries ------------------------------------------------------------------------ 1420 USER ID (USER COMMANDS) ------------------------------------------------------------------------ id (1) - print the real and effective UIDs and GIDs logname (1) - print the user's login name whoami (1) - print the effective userid chown (1) - change file owner and group chgrp (1) - change group ownership newgrp (1) - log in to a new group su (1) - change user ID or become superuser sg (1) - execute command under a different group ID ------------------------------------------------------------------------ 1440 FILESYSTEMS AND DISKS (USER COMMANDS) ------------------------------------------------------------------------ df (1) - report filesystem disk space usage di (1) - display usage information on mounted filesystems du (1) - estimate file space usage sync (1) - flush filesystem buffers mountpoint (1) - see if a directory is a mountpoint volname (1) - return volume name lsattr (1) - list extended file attributes chattr (1) - change extended file attributes cdrecord (1) - record audio or data Compact Discs from a master readcd (1) - read or write data Compact Discs growisofs (1) - access mkisofs(8) or record a DVD eject (1) - eject removable media ------------------------------------------------------------------------ 1451 THE KERNEL AND CENTRAL HARDWARE (USER COMMANDS) ------------------------------------------------------------------------ fakeroot (1) - run a command in an environment faking root logger (1) - make entries in the system log uname (1) - print system information kernelversion (1) - report the kernel's major version arch (1) - print machine architecture linuxinfo (1) - display information about system uptime (1) - tell how long the system has been running getconf (1) - query system configuration variables readprofile (1) - read kernel profiling information slabtop (1) - display kernel slab cache info in real time make-kpkg (1) - build Debian kernel packages from kernel sources ------------------------------------------------------------------------ 1455 SYSTEM RESOURCES (USER COMMANDS) ------------------------------------------------------------------------ free (1) - display the amounts of free and used memory memstat (1) - identify what's using up virtual memory mpstat (1) - report processor-related statistics iostat (1) - report CPU and I/O statistics cpuid (1) - find the CPUID of Intel and AMD x86 processors lshw (1) - list hardware sar (1) - collect, report, or save system activity info slmon (1) - monitor the system performance in real time tload (1) - represent the system load average graphically ------------------------------------------------------------------------ 1461 OWN USER ACCOUNT (USER COMMANDS) ------------------------------------------------------------------------ passwd (1) - change user password chage (1) - change user password expiry information chfn (1) - change real user name and information chsh (1) - change login shell mkpasswd (1) - encrypt the given password using the given salt expiry (1) - check and enforce password expiration policy quota (1) - display disk usage and limits groups (1) - print the groups a user is in ------------------------------------------------------------------------ 1465 OTHER USER ACCOUNTS (USER COMMANDS) ------------------------------------------------------------------------ members (1) - output members of a group gpasswd (1) - administer the /etc/group file last, lastb (1) - list recent user logins and attempts ui (1) - show information about local users users (1) - print the usernames of users currently logged in who (1) - show who is logged in w (1) - show who is logged in and what they are doing ------------------------------------------------------------------------ 1471 DEBTAGS (USER COMMANDS) ------------------------------------------------------------------------ debtags (1) - manage package tag data in a Debian system debtags-edit (1) - search and categorize Debian packages taggrep (1) - print the matching parts of a tag collection tagcoll (1) - perform various operations on tagged collections tagcolledit (1) - edit tagged collections, GUI ------------------------------------------------------------------------ 1472 OTHER DEB SCANNING AND FINDING (USER COMMANDS) ------------------------------------------------------------------------ grep-dctrl (1) - grep(1) Debian control files dglob (1) - expand package names or files matching a pattern dgrep (1) - grep(1) through an installed package's files dlocate (1) - view Debian package information dpigs (1) - show which installed packages take the most space deborphan (1) - find orphaned libraries ------------------------------------------------------------------------ 1473 DPKG (USER COMMANDS) ------------------------------------------------------------------------ dpkg-deb (1) - manipulate Debian package archives (.deb) dpkg-source (1) - (Debian source package tools) dpkg-buildpackage - build Debian binary packages dpkg-name (1) - rename Debian packages to full package names dpkg-scanpackages - create Packages files dpkg-scansources (1) - search for '.dsc' files and build 'Sources' index ------------------------------------------------------------------------ 1474 APT (USER COMMANDS) ------------------------------------------------------------------------ debget (1) - fetch a .deb for a package in apt(8)'s database debman (1) - read man pages from uninstalled packages apt-sortpkgs (1) - sort package apt(8) index files apt-ftparchive (1) - generate apt(8) index files apt-extracttemplates - extract debconf(7) config and templates apt-file (1) - search packages, command-line interface ------------------------------------------------------------------------ 1475 DEBIAN PACKAGE DEVELOPMENT (USER COMMANDS) ------------------------------------------------------------------------ lintian (1) - check Debian packages dpatch (1) - apply the patch maintenance system for Debian ucf, lcf (1) - Update Config File: preserve user changes d-devlibdeps (1) - check and list dependencies of devel library pkgs d-shlibmove (1) - move shared library files around dpkg-architecture - set and determine architecture for pkg building dpkg-checkbuilddeps - check build dependencies and conflicts ------------------------------------------------------------------------ 1476 OFFICIAL DEBIAN CD BUILDING (USER COMMANDS) ------------------------------------------------------------------------ jigdo-lite (1) - download packages and make official Debian CDs ------------------------------------------------------------------------ 1490 OTHER GENERAL ADMINISTRATION (USER COMMANDS) ------------------------------------------------------------------------ getent (1) - get entries from an administrative database mknod (1) - make block or character special files updatedb (1) - update a filename database chrootuid (1) - run a command in a restricted environment fakechroot (1) - give a fake chroot(8) environment libhid-detach-device - take HID control away from the kernel HID driver ------------------------------------------------------------------------ 1611 GENERAL TCP/IP (USER COMMANDS) ------------------------------------------------------------------------ nc (1) - create, control and use network connections getpeername (1) - get the name of a connected TCP/IP peer openssl (1) - use this SSL/TLS cryptography toolkit mini-inetd (1) - run this small TCP/IP connection dispatcher netpipe (1) - measure a network's performance, protocol indep netselect (1) - choose the fastest server automatically pktstat (1) - display packet activity on the console ------------------------------------------------------------------------ 1615 SOCKETS (USER COMMANDS) ------------------------------------------------------------------------ tcpconnect (1) - run this general TCP/IP client tcplisten (1) - run this general TCP/IP server unixclient (1) - run this UNIX domain socket client unixserver (1) - run this UNIX domain socket server unixcat (1) - print data from a UNIX domain socket netpipes (1) - manipulate BSD TCP/IP stream sockets ------------------------------------------------------------------------ 1616 TCP/IP MONITORING AND DIAGNOSTICS (USER COMMANDS) ------------------------------------------------------------------------ sendip (1) - send arbitrary IP packets tcpflow (1) - record TCP flows tcptrace (1) - analyze TCP connections tcpreen (1) - monitor TCP streams tcpbug (1) - bug a TCP/IP connection ------------------------------------------------------------------------ 1622 DNS (USER COMMANDS) ------------------------------------------------------------------------ hostname (1) - show or set the system's host name dnsdomainname (1) - show the system's DNS domain name hostid (1) - print the numeric identifier for the current host host (1) - query nameserver about domain names and zones dig (1) - send domain name query packets to name servers nslookup (1) - query internet name servers interactively whois (1) - access the Whois internet directory service ------------------------------------------------------------------------ 1624 LDAP (USER COMMANDS) ------------------------------------------------------------------------ ldapadd (1) - add LDAP entries ldapmodify (1) - modify LDAP entries ldapdelete (1) - delete LDAP entries ldapmodrdn (1) - rename LDAP entries ldapcompare (1) - compare LDAP entries ldapsearch (1) - search for LDAP entries ldappasswd (1) - change the password of an LDAP entry ldapwhoami (1) - ask LDAP, "who am I?" ------------------------------------------------------------------------ 1627 FURTHER NETWORK FOUNDATION (USER COMMANDS) ------------------------------------------------------------------------ rpcgen (1) - compile an RPC protocol ------------------------------------------------------------------------ 1641 GENERAL NETWORK CLIENTS ------------------------------------------------------------------------ finger (1) - look user information up pinky (1) - finger(1), lightweight ------------------------------------------------------------------------ 1642 FTP ------------------------------------------------------------------------ curl (1) - transfer a URL rsync (1) - transfer just the diffs betw two sets of files ftp (1) - transfer files over the network lftp (1) - transfer files over the network, sophisticated ncftp (1) - transfer files over the network, full screen weex (1) - fast WEb EXchanger non-interactive FTP client wput (1) - upload FTP as wget(1) fmirror (1) - mirror directories from FTP servers ------------------------------------------------------------------------ 1644 TELNET, RSH AND SSH ------------------------------------------------------------------------ ssh (1) - log in to a remote machine and run commands there scp (1) - securely copy files remotely sftp (1) - transfer files securely ssh-keygen (1) - generate, manage and convert authentication keys ssh-agent (1) - run the SSH authentication agent ssh-add (1) - add RSA or DSA idents to the authentication agent ssh-argv0 (1) - ssh(1) with the hostname as argv[0] argument telnet (1) - log in to a remote machine (unencrypted) ------------------------------------------------------------------------ 1645 MAIL ------------------------------------------------------------------------ from (1) - print the names of those who have sent mail lsmbox (1) - count total, old, unread and new msgs in a mailbx mboxgrep (1) - grep(1) mail messages formail (1) - format or reformat mail mutt (1) - read mail mutt_dotlock (1) - lock mail spool files mail (1) - send and receive mail vrfy (1) - verify electronic mail addresses procmail (1) - process mail autonomously fetchmail (1) - fetch mail from a POP, IMAP or other mailbox srvr mpack, munpack (1) - pack or unpack a message in MIME format run-mailcap (1) - execute programs via entries in the mailcap file ------------------------------------------------------------------------ 1646 MESSAGING ------------------------------------------------------------------------ wall (1) - write a message to users write (1) - send a message to another user mesg (1) - control write access to your terminal talk (1) - talk to another user irc (1) - engage in Internet Relay Chat epic4 (1) - engage in IRC with this improved client ------------------------------------------------------------------------ 1647 WEB ------------------------------------------------------------------------ lynx (1) - browse the World Wide Web in text mode w3m (1) - browse the World Wide Web in text mode with mouse sensible-browser (1) - run a sensible web browser httping (1) - ping(8), but for http-requests wget (1) - retrieve files from the world wide web httrack (1) - copy websites to a local directory html2text (1) - convert HTML to text tidy (1) - clean up and pretty print HTML/XHTML/XML ------------------------------------------------------------------------ 1711 PRINT DISPATCH AND BASIC PRINTING ------------------------------------------------------------------------ paperconf (1) - print paper configuration information ------------------------------------------------------------------------ 1714 PDF ------------------------------------------------------------------------ pdfinfo (1) - extract document information from PDF pdfimages (1) - extract images from PDF pdftk (1) - manipulate PDF pdftotext (1) - convert PDF to text ------------------------------------------------------------------------ 1718 FONTS ------------------------------------------------------------------------ defoma (1) - (Debian Font Manager: auto font config framework) pdffonts (1) - analyze the fonts in a PDF file ------------------------------------------------------------------------ 1725 TEX ------------------------------------------------------------------------ tex (1) - format and typeset text latex (1) - format and typeset structured text pslatex (1) - latex(1) with PS fonts rubber (1) - apply this building system for LaTeX documents rubber-info (1) - extract information from LaTeX documents untex (1) - remove LaTeX commands from input amstex (1) - format and typeset mathematical documents bibtex (1) - make a bibliography for (La)TeX makeindex (1) - process document indices mf (1) - apply Metafont, a lang for font and logo design mpost (1) - apply MetaPost, a system for drawing pictures lilypond (1) - format and typeset music dvips (1) - convert a TeX DVI file to PS dvired (1) - dvips(1) reduced: two pages per sheet dvipdf (1) - convert TeX DVI file to PDF by gs(1) and dvips(1) makeinfo (1) - translate texinfo documents texindex (1) - sort texinfo index files texi2dvi (1) - print texinfo documents texi2pdf (1) - create a PDF file from a texinfo file ------------------------------------------------------------------------ 1726 XML/SGML ------------------------------------------------------------------------ nsgmls, onsgmls (1) - parse and validate SGML jade, openjade (1) - interpret DSSSL spent, ospent (1) - print SGML entity on stdout spam, ospam (1) - stream-edit SGML sgmlnorm, osgmlnorm - normalize SGML documents sgml2xml, osx (1) - convert SGML to XML ospcat (1) - print system identifiers found in the catalogs xsltproc (1) - process XSLT ------------------------------------------------------------------------ 1727 GROFF AND OTHER MARKUP ------------------------------------------------------------------------ groff (1) - format documents through this general front end nroff (1) - format documents for typewriter-like devices troff (1) - format documents in the classic Unix way eqn (1) - format equations for troff(1) tbl (1) - format tables for troff(1) pic (1) - compile pictures for troff(1) or TeX colcrt (1) - filter nroff(1) output for CRT preview soelim (1) - interpret .so requests in groff(1) input mmroff (1) - preprocess groff_mm(7) references deroff (1) - remove roff and preprocessor constructs ------------------------------------------------------------------------ 1740 IMAGE FILTRATION AND HANDLING ------------------------------------------------------------------------ netpbm (1) - (graphics manipulation programs) pbmfilters (1) - (list of all programs in the `netpbm' package) libgd-tools (1) - convert between gd and other graphics formats convert (1) - convert an image or sequence of images identify (1) - describe an image or image sequence ------------------------------------------------------------------------ 1751 MATHEMATICS AND PHYSICAL SCIENCE ------------------------------------------------------------------------ dc (1) - calculate RPN-style with arbitrary precision bc (1) - calculate programmably with arbitrary precision sc (1) - calculate by spreadsheet octave (1) - compute interactively or programmably, high level gnuplot (1) - plot interactively units (1) - convert dimensions from one unit to another ------------------------------------------------------------------------ 1759 RANDOM NUMBERS AND CRYPTOGRAPHY ------------------------------------------------------------------------ gpg (1) - encrypt and sign files gpgv (1) - signature verification tool mcrypt, mdecrypt (1) - encrypt or decrypt files pwgen (1) - generate pronounceable passwords apg (1) - generates several random passwords gpw (1) - generate pronounceable passwords by trigraph mcookie (1) - generate a 128-bit random hexadecimal number rolldice (1) - roll virtual dice ------------------------------------------------------------------------ 1770 FURTHER USER COMMANDS ------------------------------------------------------------------------ mev (1) - report mouse events ------------------------------------------------------------------------ 1810 X FOUNDATION ------------------------------------------------------------------------ Xserver (1x) - (X Window System display server) XFree86 (1x) - (X11R6 X server) xinit (1x) - initialize the X Window System startx (1x) - initialize an X session ------------------------------------------------------------------------ 1821 GENERAL BASIC X ------------------------------------------------------------------------ xrdb (1x) - run this X server resource database utility xset (1x) - run this X user-preference utility xsetroot (1x) - set X root window parameters xstdcmap (1x) - run this X standard-colormap utility xwininfo (1x) - run this window-information utility for X xlsclients (1x) - list client applications running on a display xdpyinfo (1x) - display information about an X server xlsatoms (1x) - list interned atoms defined on an X server xprop (1x) - display X properties xon (1x) - start an X program on a remote machine xkill (1x) - kill a client by its X resource xrefresh (1x) - refresh all or part of an X screen xtoolwait (1x) - start X client and wait for it to map a window xrandr (1x) - set size, orientation and reflection of outputs ------------------------------------------------------------------------ 1822 X TTY ------------------------------------------------------------------------ xterm (1x) - emulate a VT102 terminal on X resize (1x) - set TERMCAP & termnl to current xterm window size ------------------------------------------------------------------------ 1824 X FONTS AND IMAGE HANDLING ------------------------------------------------------------------------ xwd, xwud (1x) - dump or display an image on X xwdtopnm (1x) - convert an X11 window dump into a portable anymap xloadimage (1x) - load images into an X11 window or the root window xlsfonts (1x) - display the X server's font list mkfontdir (1x) - create an index of X font files in a directory ------------------------------------------------------------------------ 1830 X PROGRAMMING ------------------------------------------------------------------------ mkdirhier (1x) - make a directory hierarchy lndir (1x) - create a shadow dir of sym links to another tree cleanlinks (1x) - remove dangling symlinks and empty directories revpath (1x) - generate a relative path to later undo a `cd' makedepend (1x) - create dependencies in makefiles ccmakedep (1x) - create dependencies in makefiles using C compiler gccmakedep (1x) - create dependencies in makefiles using 'gcc -M' imake (1x) - run this C-preprocessor interface to make(1) xmkmf (1x) - create a Makefile from an Imakefile makestrs (1x) - make string-table C source and headers mergelib (1x) - merge one library into another makeg (1x) - make a debuggable executable ------------------------------------------------------------------------ 1900 AUDIO ------------------------------------------------------------------------ amixer (1) - mix ALSA audio from the command line aplay (1) - record and play sounds via ALSA from the cmd line speaker-test (1) - generate a speaker test tone via ALSA ------------------------------------------------------------------------ 4100 GENERAL DEVICES ------------------------------------------------------------------------ null, zero (4) - data sink full (4) - always-full device stdin (4) - stdin by the device /dev/stdin stdout, stderr (4) - stdout and stderr by /dev/stdout and /dev/stderr fifo (4) - first-in first-out special file; named pipe mem (4) - system memory kmem (4) - kernel memory port (4) - system I/O ports random, urandom (4) - kernel random number source devices futex (4) - fast userspace mutexes for locking and semaphores epoll (4) - I/O event notification facility ------------------------------------------------------------------------ 4200 CONSOLE AND TTY DEVICES ------------------------------------------------------------------------ console (4) - console terminal and virtual consoles console_codes (4) - Linux console escape and control sequences console_ioctl (4) - ioctl's for console terminal and virtual consoles vcs, vcsa (4) - virtual console memory and attributes tty (4) - controlling terminal ttyS (4) - serial terminal lines tty_ioctl (4) - ioctls for terminals and serial lines ptmx, pts (4) - pseudo-terminal master and slave ------------------------------------------------------------------------ 4400 DISK AND STORAGE DEVICES ------------------------------------------------------------------------ hd (4) - MFM/IDE hard disk devices sd (4) - SCSI disk drives ram (4) - ram disk device initrd (4) - boot-loader initialized RAM disk ------------------------------------------------------------------------ 4700 OTHER DEVICES ------------------------------------------------------------------------ ipfw (4) - IP firewall lp (4) - line printer devices mouse (4) - serial mice ------------------------------------------------------------------------ 4800 X VIDEO DEVICES ------------------------------------------------------------------------ vesa (4x) - generic VESA video driver vga (4x) - generic VGA video driver i810, radeon, ... - video drivers fbdev (4x) - video driver for framebuffer device fbdevhw (4x) - OS-specific submodule for framebuffer access kbd (4x) - keyboard input driver, new-style keyboard (4x) - keyboard input driver, old-style mouse (4x) - mouse input driver void (4x) - null input driver ------------------------------------------------------------------------ 5110 GENERAL FILE FORMATS ------------------------------------------------------------------------ charmap (5) - character symbols to define character encodings dir_colors (5) - configuration file for dircolors(1) ------------------------------------------------------------------------ 5140 DOCUMENTATION AND NATURAL-LANGUAGE FILE FORMATS ------------------------------------------------------------------------ info (5) - info(1) documentation format texinfo (5) - software documentation system ispell (5) - format of ispell(1) dictionaries and affix files english (5) - flag format for English ispell dictionaries american-english (5) - a list of American English words british-english (5) - a list of British English words wnintro (5) - WordNet file formats ------------------------------------------------------------------------ 5160 GROFF FILE FORMATS ------------------------------------------------------------------------ groff_tmac (5) - macro files in the roff typesetting system groff_out (5) - groff intermediate output format groff_font (5) - format of groff device and font description files ------------------------------------------------------------------------ 5200 TTY- AND CONSOLE-RELATED FILE FORMATS ------------------------------------------------------------------------ terminfo (5) - terminal capability database term (5) - compiled term file format issue (5) - pre-login message and identification motd (5) - message of the day securetty (5) - the ttys from which root can log in keymaps (5) - keyboard table descriptions ------------------------------------------------------------------------ 5300 PROGRAMMING FILE FORMATS ------------------------------------------------------------------------ locale (5) - locale(7) definition file format locale.alias (5) - locale name alias database elf (5) - format of ELF executable binary files rcsfile (5) - RCS file format complex (5) - basics of complex mathematics ------------------------------------------------------------------------ 5410 BOOT-CONTROL FILE FORMATS ------------------------------------------------------------------------ rcS (5) - defaults used at boot time inittab (5) - format of the init(8) process' inittab file initscript (5) - script that executes inittab(5) commands lilo.conf (5) - lilo(8) configuration ------------------------------------------------------------------------ 5420 USER-ID FILE FORMATS ------------------------------------------------------------------------ sudoers (5) - which users may execute what ------------------------------------------------------------------------ 5430 PROCESS-CONTROL FILE FORMATS ------------------------------------------------------------------------ proc (5) - process-information pseudo-filesystem ipc (5) - (System V interprocess communication mechanisms) crontab (5) - tables for driving cron(8) and crontab(1) anacrontab (5) - anacron(8) configuration acct (5) - execution accounting file format ------------------------------------------------------------------------ 5440 FILESYSTEM-CONTROL FILE FORMATS ------------------------------------------------------------------------ fstab (5) - static information about the filesystems fs (5) - linux filesystem types: ext2; ext3; proc; etc. ------------------------------------------------------------------------ 5450 KERNEL-INTERFACE FILE FORMATS ------------------------------------------------------------------------ modules (5) - kernel modules to load at boot time modules.modutils (5) - kernel modules to load at boot time (modutils) modules.conf (5) - kernel-module loading configuration modules.dep (5) - module dependencies modprobe.conf (5) - modprobe(8) configuration sysctl.conf (5) - sysctl(8) preload/configuration slabinfo (5) - kernel slab allocator statistics ------------------------------------------------------------------------ 5461 GENERAL USER-ACCOUNT ADMINISTRATION FILE FORMATS ------------------------------------------------------------------------ passwd (5) - password file format group (5) - user group file format shadow (5) - encrypted password file format nologin (5) - file to prevent non-root users from logging in login.access (5) - login access control table login.defs (5) - shadow password suite configuration utmp, wtmp (5) - login records faillog (5) - login failure log ------------------------------------------------------------------------ 5462 USER-ACCOUNT CREATION AND LIMITATION FILE FORMATS ------------------------------------------------------------------------ adduser.conf (5) - adduser(8) and addgroup(8) configuration deluser.conf (5) - deluser(8) and delgroup(8) configuration shells (5) - pathnames of valid login shells limits.conf (5) - resource limits definition porttime (5) - port access time file format at.allow, at.deny - who can and cannot submit at(1) jobs ------------------------------------------------------------------------ 5470 DEBIAN FILE FORMATS ------------------------------------------------------------------------ sources.list (5) - apt(8) package resource list vendors.list (5) - apt(8) security key configuration apt.conf (5) - apt(8) configuration apt_preferences (5) - apt(8) preference control deb (5) - Debian binary package format deb-control (5) - Debian packages' master control file format dpkg.cfg (5) - dpkg(8) configuration debconf.conf (5) - debconf(7) configuration kernel-package (5) - (a system for creating kernel-related packages) ucf.conf (5) - site-wide ucf(8) configuration ------------------------------------------------------------------------ 5490 OTHER SYSTEM-CONFIGURATION FILE FORMATS ------------------------------------------------------------------------ locale.gen (5) - locale-gen(8) configuration syslog.conf (5) - syslogd(8) configuration manpath (5) - man and cat path configuration locatedb (5) - front-compressed filename database tzfile (5) - time zone information ------------------------------------------------------------------------ 5610 GENERAL NETWORKING FILE FORMATS ------------------------------------------------------------------------ interfaces (5) - ifup(8)/ifdown(8) network-interface configuration protocols (5) - the protocols definition file services (5) - internet network services list inetd.conf (5) - internet servers database rpc (5) - RPC program number data base ethers (5) - ethernet address to IP number database networks (5) - network name information ------------------------------------------------------------------------ 5620 DNS FILE FORMATS ------------------------------------------------------------------------ resolv.conf (5) - hostname resolver configuration host.conf (5) - more hostname resolver configuration hosts (5) - the static table lookup for host names hosts_access (5) - host-access control file format hosts_options (5) - host-access control language extensions hosts.equiv (5) - hosts/users granted trusted command access nsswitch.conf (5) - system databases and name-service switch config ------------------------------------------------------------------------ 5640 CONFIGURATION OF NETWORK CLIENTS AND SERVERS ------------------------------------------------------------------------ ssh_config (5) - OpenSSH SSH client configuration files sshd_config (5) - OpenSSH SSH daemon configuration file moduli (5) - system moduli file for sshd(8) netrc (5) - user configuration for ftp(1) rsyncd.conf (5) - rysnc server configuration ldap.conf (5) - LDAP configuration file ldif (5) - LDAP Data Interchange Format ------------------------------------------------------------------------ 5650 MAIL FILE FORMATS ------------------------------------------------------------------------ mailname (5) - the visible mail name of the system mbox (5) - format for mail message storage mailcap (5) - metamail capabilities mailcap.order (5) - the mailcap ordering specifications muttrc (5) - mutt(1) mail user agent configuration procmailrc (5) - procmail(1) configuration procmailex (5) - procmail(1) configuration examples procmailsc (5) - procmail(1) weighted scoring technique uuencode (5) - the format of an encoded uuencode(1) file ------------------------------------------------------------------------ 5730 PRINTSERVICE CONFIGURATION FILE FORMATS ------------------------------------------------------------------------ papersize (5) - the preferred paper size printcap (5) - printer capability database ------------------------------------------------------------------------ 5740 IMAGE FORMATS ------------------------------------------------------------------------ png (5) - Portable Network Graphics (PNG) format pnm (5) - portable anymap file format pbm (5) - portable bitmap file format pgm (5) - portable graymap file format ppm (5) - portable pixmap file format pam (5) - portable arbitrary map file format ------------------------------------------------------------------------ 5770 FURTHER FILE FORMATS ------------------------------------------------------------------------ gpm.conf (5) - startup configuration file for gpm(8) magic (5) - file(1)'s magic number file format ------------------------------------------------------------------------ 5800 X-CONFIGURATION FILE FORMATS ------------------------------------------------------------------------ XF86Config-4 (5x) - X server configuration Xsession (5x) - script to initialize an X session Xsession.options - configuration options for X sessions Xwrapper.config (5x) - the X server wrapper configuration menufile (5x) - Debian menu-system entry format ------------------------------------------------------------------------ 7100 SYSTEM CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ environ (7) - user environment signal (7) - list of available signals unix (7) - sockets for local interprocess communication capabilities (7) - overview of Linux capabilities netlink (7) - communication between kernel and user boot (7) - a general description of the boot sequence bootparam (7) - intro to boot-time parameters of the Linux kernel ------------------------------------------------------------------------ 7200 CHARACTER-SET CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ locale (7) - multi-language support charsets (7) - programmer's view of character sets and i18n ascii (7) - the ascii character set in octal, decimal, & hex utf-8 (7) - an ASCII compatible multibyte unicode(7) encoding unicode (7) - the Universal Character Set iso-8859-1, latin1 - iso-8859-1 character set in octal, decimal & hex ------------------------------------------------------------------------ 7300 GROFF CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ man (7) - macros to format man pages roff (7) - concepts and history of roff typesetting groff (7) - a short reference for the GNU roff language ditroff (7) - classical device independent roff mdoc (7) - quick reference guide for the -mdoc macro package groff_mdoc (7) - reference for groff(1)'s mdoc implementation groff_man (7) - groff(1) man macros to generate man pages groff_me (7) - troff(1) me macros for formatting papers groff_ms (7) - groff(1) ms macros for structuring documents groff_mm (7) - groff(1) mm macros groff_mom (7) - groff(1) mom typesetting and doc processng macros groff_char (7) - groff(1) character names groff_diff (7) - differences between GNU and classical troff(1) ------------------------------------------------------------------------ 7400 DEBIAN CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ debhelper (7) - tools to automate common aspects of pkg building debconf (7) - Debian package configuration system debconf-devel (7) - debconf(7) developer's guide po-debconf (7) - manage translatd debconf(7) files with gettext(1) dbs (7) - Debian Build System dpatch (7) - dpatch(1) patch-maintenance overview ------------------------------------------------------------------------ 7610 BASIC TCP/IP CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ ip (7) - Linux IPv4 protocol implementation ipv6 (7) - Linux IPv6 protocol implementation tcp (7) - TCP protocol udp (7) - User Datagram Protocol for IPv4 icmp (7) - Linux IPv4 ICMP kernel module packet (7) - packet interface on device level socket (7) - Linux socket interface raw (7) - Linux IPv4 raw sockets netdevice (7) - low-level access to Linux network devices ------------------------------------------------------------------------ 7670 FURTHER NETWORK CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ rtnetlink (7) - Linux IPv4 routing socket arp (7) - Linux Address Resolution Protocol implementation uri, url, urn (7) - uniform resource identifier URI, incl URL and URN mailaddr (7) - mail addressing description pam (7) - Pluggable Authentication Modules for Linux ------------------------------------------------------------------------ 7710 GENERAL CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ LDP (7) - Linux Doc Project: HOWTOs, help, guides and docs bash-builtins (7) - bash built-in commands, see bash(1) hier (7) - description of the file system hierarchy suffixes (7) - list of file suffixes glob (7) - globbing pathnames regex (7) - POSIX 1003.2 regular expressions operator (7) - C operator precedence and order of evaluation units (7) - decimal and binary prefixes ------------------------------------------------------------------------ 7770 FURTHER CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ gnupg (7) - the GNU Privacy Guard suite of programs wnintro (7) - introduction to miscellaneous WordNet information gpm-types (7) - the types of mouse gpm(8) can manage posixoptions (7) - optional parts of the POSIX standard term (7) - conventions for naming terminal types gpl (7) - GNU General Public License ------------------------------------------------------------------------ 7800 X CONVENTIONS AND MISCELLANY ------------------------------------------------------------------------ X (7x) - a portable, network-transparent window system XF86Config (7x) - X server configuration overview ------------------------------------------------------------------------ 8111 INIT ------------------------------------------------------------------------ init (8) - initialize process control telinit (8) - signal init(8) runlevel (8) - find the current and previous system runlevel halt (8) - stop the system reboot (8) - stop the system and reboot poweroff (8) - stop the system and power down shutdown (8) - bring the system down sulogin (8) - login(1) in single-user mode invoke-rc.d (8) - execute System-V style init script actions update-rc.d (8) - install/remove System-V style init script links ------------------------------------------------------------------------ 8112 OS INSTALLATION ------------------------------------------------------------------------ base-config (8) - configure the base Debian system lilo (8) - install a boot loader grub (8) - enter the GRand Unified Bootloader shell ------------------------------------------------------------------------ 8117 OTHER BOOTING ------------------------------------------------------------------------ dmesg (8) - print or control the kernel ring buffer getty (8) - open tty and invoke login(1) ------------------------------------------------------------------------ 8120 USER ID ------------------------------------------------------------------------ sudo (8) - execute a command as another user ------------------------------------------------------------------------ 8130 PROCESS ADMINISTRATION ------------------------------------------------------------------------ lsof (8) - list open files lslk (8) - list local locks killall5 (8) - send a signal to all processes start-stop-daemon - start and stop system daemon programs setsid (8) - run a program in a new session pidof (8) - find the process ID of a running program ipcs (8) - provide information on IPC facilities ipcrm (8) - remove the specified IPC resources ------------------------------------------------------------------------ 8141 FILESYSTEM MOUNTING AND GENERAL CONTROL ------------------------------------------------------------------------ mount, umount (8) - mount or unmount a file system pivot_root (8) - change the root file system losetup (8) - set up and control loop devices ------------------------------------------------------------------------ 8142 FILESYSTEM CREATION AND MAINTENANCE ------------------------------------------------------------------------ mke2fs (8) - create an ext2/ext3 filesystem dumpe2fs (8) - dump ext2/ext3 filesystem information tune2fs (8) - adjust tunable parameters on ext2/ext3 filesystms e2fsck (8) - check a Linux ext2/ext3 file system e2label (8) - change the label on an ext2/ext3 filesystem debugfs (8) - ext2/ext3 file system debugger filefrag (8) - report on file fragmentation mklost+found (8) - create a lost+found dir on a mounted filesystem mkswap (8) - set up a Linux swap area swapon, swapoff (8) - enable/disable devs & files for paging & swapping ------------------------------------------------------------------------ 8143 CD-ROMS ------------------------------------------------------------------------ mkisofs (8) - create an iso9660 filesystem isoinfo (8) - dump or verify iso9660 images mkzftree (8) - create a zisofs/rockridge compressed file tree lsscsi (8) - list all SCSI devices (or hosts) on the system sginfo (8) - access mode-page information for a SCSI device sg_scan (8) - scan sg SCSI generic devices sg_dd (8) - copy data to and from files and SCSI devices ------------------------------------------------------------------------ 8148 HARD-DISK PARTITIONING AND DEVICE CONTROL ------------------------------------------------------------------------ fdisk (8) - manipulate a partition table interactively cfdisk (8) - manipulate a partition table by curses interface sfdisk (8) - manipulate a partition table noninteractively blockdev (8) - call block device ioctls from the command line blkid (8) - locate/print block device attributes elvtune (8) - tune the I/O elevator ------------------------------------------------------------------------ 8151 KERNEL CONTROL AND MANAGEMENT OF CENTRAL HARDWARE ------------------------------------------------------------------------ MAKEDEV (8) - create devices vmstat (8) - report virtual memory statistics rdev (8) - query/set rootflags, swapdev, ramsize or vidmode sysctl (8) - configure kernel parameters at runtime hwclock (8) - query and set the hardware clock (RTC) rdate (8) - set the system's date from a remote host syslogd-listfiles - list system logfiles ksymoops (8) - a utility to decode Linux kernel Oops lcap (8) - remove Linux kernel capabilities installkernel (8) - install a new kernel image ------------------------------------------------------------------------ 8152 KERNEL-MODULE CONTROL ------------------------------------------------------------------------ lsmod (8) - show Linux kernel module status lsmod.modutils (8) - list loaded kernel modules insmod (8) - insert a module into the Linux kernel insmod.modutils (8) - install a loadable kernel module rmmod (8) - remove a module from the Linux kernel rmmod.modutils (8) - unload loadable kernel modules depmod (8) - generate modules.dep(5) and map files depmod.modutils (8) - handle kernel-module dependency descriptions modinfo (8) - show information about a Linux kernel module modinfo.modutils (8) - display information about a kernel module modprobe (8) - add and remove modules from the Linux kernel modprobe.modutils - handle loadable kernel modules, high level modclean (8) - automatically unload loadable modules genksyms (8) - generate kernel symbol version information ksyms.modutils (8) - display exported kernel symbols kallsyms.modutils - extract all kernel symbols for debugging ------------------------------------------------------------------------ 8156 KERNEL TUNING ------------------------------------------------------------------------ knl (8) - query/set kernel image configuration parameters systune (8) - tune the kernel through the /proc filesystem adjtimex (8) - display or set the kernel time variables ------------------------------------------------------------------------ 8158 EXPANSION BUSSES AND IRQS ------------------------------------------------------------------------ lspci (8) - list all PCI devices setpci (8) - configure PCI devices pcimodules (8) - list the modules avail to drive installd PCI devs lsusb (8) - list USB devices hotplug (8) - notify software when the user plugs a USB dev in usbmodules (8) - list the modules avail to drive installd USB devs ------------------------------------------------------------------------ 8161 GENERAL USER-ACCOUNT ADMINISTRATION ------------------------------------------------------------------------ pwck, grpck (8) - verify the integrity of password and group files update-passwd (8) - safely update /etc/passwd, shadow and group pwconv (8) - convert to and from shadow passwords and groups shadowconfig (8) - toggle shadow(5) passwords on and off lastlog (8) - examine users' last logins faillog (8) - examine login failures and set limits thereto ------------------------------------------------------------------------ 8162 CREATION AND LIMITATION OF USER ACCOUNTS ------------------------------------------------------------------------ adduser, addgroup - add a user or group to the system deluser, delgroup - remove a user or group from the system useradd, groupadd - (adduser(8) and addgroup(8) are usu preferred) userdel, groupdel - (deluser(8) and delgroup(8) are usu preferred) usermod, groupmod - modify a user account or group chpasswd (8) - update password file in batch newusers (8) - update and create new users in batch ------------------------------------------------------------------------ 8180 CONSOLE CONTROL ------------------------------------------------------------------------ consolechars (8) - load a console font getkeycodes (8) - print kernel scancode-to-keycode mapping table setkeycodes (8) - load kernel scancode-to-keycode mapping table install-keymap (8) - expand a keymap and install it for boot kbdconfig (8) - configure the console keyboard kbdrate (8) - reset the keyboard repeat rate and delay time mk_modmap (8) - translate a Linux keytable file to an xmodmap setlogcons (8) - send kernel messages to console N setvesablank (8) - turn VESA screen blanking on or off writevt (8) - put text into the input buffer of a virtual term ------------------------------------------------------------------------ 8191 THE LINKER AND CHROOT ------------------------------------------------------------------------ ld.so (8) - load and link shared libs dynamically at runtime ldconfig (8) - configure dynamic linker run-time bindings prelink (8) - prelink shared libs and binaries to start faster chroot (8) - run command or shell with special root directory makejail (8) - help to create and maintain a chroot(8) jail ------------------------------------------------------------------------ 8193 ADMINISTRATIVE LOGGING ------------------------------------------------------------------------ logsave (8) - save the output of a command in a logfile savelog (8) - save a log file logrotate (8) - rotate, compress and mail system logs ------------------------------------------------------------------------ 8194 MAN ADMINISTRATION ------------------------------------------------------------------------ mandb (8) - create or update the manual-page index caches accessdb (8) - dump a man-db database in a human readable format catman (8) - create or update the pre-formatted manual pages ------------------------------------------------------------------------ 8196 PRINTER ADMINISTRATION ------------------------------------------------------------------------ paperconfig (8) - configure the system default paper size lpc (8) - control the printer tunelp (8) - set various parameters for the lp device ------------------------------------------------------------------------ 8197 FURTHER GENERAL ADMINISTRATION ------------------------------------------------------------------------ run-parts (8) - run scripts or programs in a directory update-alternatives - maintain symlinks determining default commands raw (8) - bind a Linux raw character device locale-gen (8) - generate localisation files from templates iconvconfig (8) - create a fast-loading iconv(1) module config ------------------------------------------------------------------------ 8198 TIME-ZONE ADMINISTRATION ------------------------------------------------------------------------ tzconfig (8) - set the local time zone tzsetup (8) - set the local time zone (enhanced) tzselect (8) - select a time zone zic (8) - compile a time-zone conversion information file ------------------------------------------------------------------------ 8211 DPKG ------------------------------------------------------------------------ dpkg (8) - manage Debian packages in a medium-level manner dpkg -L (8) - list all the files the given package owns dpkg -s (8) - summarize an installed package dpkg-reconfigure (8) - reconfigure an already installed package dpkg-query (8) - query the dpkg(8) database dpkg-divert (8) - override a package's version of a file dpkg-statoverride - override files' ownership and mode dpkg-split (8) - split or join Debian package archives ------------------------------------------------------------------------ 8212 APT ------------------------------------------------------------------------ apt (8) - (Advanced Package Tool) apt-get (8) - handle packages from the command line apt-cache (8) - manipulate apt(8)'s cache apt-cdrom (8) - add a new CDROM to apt(8)'s list of avail sources apt-setup (8) - add apt(8) download sources apt-rdepends (8) - list dependencies recursively, like apt-cache(8) apt-move (8) - move a cache of packages into a mirror hierarchy ------------------------------------------------------------------------ 8217 OTHER DEB INSTALLATION ------------------------------------------------------------------------ debfoster (8) - weed unnecessary Debian packages orphaner (8) - interactively select packages for deborphan(1) editkeep (8) - interactively select packages never for deborphan aptitude (8) - manage packages, visual or command-line interface dselect (8) - manage Debian packages on the console ------------------------------------------------------------------------ 8250 DEBIAN PACKAGING AND DEVELOPMENT ------------------------------------------------------------------------ pbuilder (8) - personal package builder install-docs (8) - manage online Debian documentation install-info (8) - create or update entry in the Info directory cleanup-info (8) - clean up the mess left by a bogus install-info update-mime (8) - create or update MIME information dpkg-preconfigure - let packages ask questions prior to installation dh_make (8) - Debianize a regular source archive ------------------------------------------------------------------------ 8500 GENERAL SERVICES ------------------------------------------------------------------------ atd (8) - run jobs queued for later execution cron (8) - execute scheduled commands (daemon) anacron (8) - run commands periodically syslogd (8) - support system logging and kernel msg trapping klogd (8) - intercept and log Linux kernel messages bootlogd (8) - record boot messages rngd (8) - feed the kernel entropy pool from the HW rand gen lpd (8) - spool print jobs dictd (8) - serve dict(1) dictionary databases gpm (8) - enable mouse cut-and-paste on the console ------------------------------------------------------------------------ 8611 NETWORK INTERFACE CONTROL ------------------------------------------------------------------------ ifup, ifdown (8) - bring a network interface up or take it down ifconfig (8) - configure a network interface arp (8) - manipulate the system ARP cache rarp (8) - manipulate the system RARP table nameif (8) - name network interfaces based on MAC addresses slattach (8) - attach a network interface to a serial line mii-tool (8) - view, manipulate media-indep interface status ------------------------------------------------------------------------ 8612 ROUTING AND FIREWALLING ------------------------------------------------------------------------ iptables (8) - administer IPv4 packet filtering and NAT ipfwadm (8) - administer and account for ipfw(4) IP firewalls route (8) - show/manipulate the IP routing table ip (8) - show/manipulate routing, devices & policy routing tc (8) - show/manipulate traffic control settings ikeygen (8) - generate a random DES key for use with identd(8) ------------------------------------------------------------------------ 8614 ICMP, PING AND TRACEROUTE ------------------------------------------------------------------------ ping (8) - send ICMP ECHO_REQUEST packets to network hosts fping (8) - ping(8), for use in scripts bing (8) - determine the bandwidth on a point-to-point link traceroute (8) - print the route packets take to network host traceroute6 (8) - traceroute(8) for IPv6 tracepath (8) - trace the path to a network host, discovering MTU tracepath6 (8) - tracepath(8) for IPv6 mtr (8) - traceroute(8) and ping(8), combined ------------------------------------------------------------------------ 8616 TCP/IP MONITORING AND DIAGNOSTICS ------------------------------------------------------------------------ netstat (8) - print network connections, routing tables, stats tcpdump (8) - dump traffic on a network iftop (8) - display bandwidth usage on an interface by host ipgrab (8) - sniff packets verbosely packit (8) - analyze and inject packets ------------------------------------------------------------------------ 8620 OTHER NETWORK ADMINISTRATION ------------------------------------------------------------------------ dnstracer (8) - trace a chain of DNS servers to the source nsupdate (8) - update Dynamic DNS rpcinfo (8) - report RPC information pmap_set, pmap_dump - set or print the list of registered RPC programs ------------------------------------------------------------------------ 8640 NETWORK SERVICES ------------------------------------------------------------------------ tcpd (8) - control access to internet services portmap (8) - DARPA port to RPC program number mapper sshd (8) - run the SSH secure shell daemon identd (8) - run the TCP/IP ident protocol server in.identtestd (8) - test identd(8) inetd (8) - run the internet super-server update-inetd (8) - create, remove or disable in /etc/inetd.conf(5) exim4 (8) - run this mail-transfer agent named (8) - serve domain names slapd (8) - serve LDAP talkd (8) - serve remote user communications ------------------------------------------------------------------------ HOW TO LEARN MORE ABOUT A SPECIFIC COMMAND To learn more about a specific command, try man command man [n] command (where [n] is the one-digit man section number) man -a command info command (GNU commands and some others) help command (bash(1) builtins) man 1 bash (bash(1) builtins, elements and operators) command --help command -h command -? command -help locate command whereis command which command dpkg -S $( which command ) dpkg -L $( dpkg -S $( which command ) | sed -e 's/:.*//' ) ls -RC --co /usr/share/doc/command* ls -RC --co /usr/share/doc/HOWTO/en-txt (If the output scrolls off the screen, cature it with less(1) as described under "How To Find Other Commands" below.) When all else fails, the ultimate way to learn all about any command is to read its source code. A bit desperate? Perhaps! Even GNU/Linux experts do not resort to such measures often. However, very occasionally reading a bit of the source is precisely what the situation calls for. Free software includes the source, so if you feel up to the challenge, why not read it? (And if you don't yet feel up to the challenge but would like to someday, why, to learn the commands in this Guide should help you significantly along the way.) HOW TO INSTALL A MISSING COMMAND Most of the useful commands this Guide covers are found on most GNU/Linux systems everywhere. Nevertheless, you may occasionally find that "man command" returns nothing and that the command is not installed on your system. If your system is a Debian system and you are logged in as root, apt-get install package installs the Debian package providing the desired command. In the Debian archive (usually found online at your nearest Debian mirror), see dists/stable/main/Contents-* to identify the package in which the desired command may be found. HOW TO FIND OTHER COMMANDS One may obtain at any time a more complete listing of available commands by whatis -w '*' info help echo $PATH ls -RC --co /bin ls -RC --co /usr/bin ls -RC --co /usr/bin/X11 ls -RC --co /sbin ls -RC --co /usr/sbin manpath ls -RC --co /usr/share/man/ ls -RC --co /usr/X11R6/man/ ls -RC --co /usr/share/info/ and so forth. (If the output of any of the above commands scrolls off the screen, capture it by appending a " | less -r" to the command. For example, "whatis -w '*' | less -r". In `less', the , , and keys work as expected. To quit `less', press `q'.) THE RAMIFICATION NUMBERING SYSTEM The Guide's branches are numbered as much like the branches in the main Debian Ramification as is practical. However, packages and commands are different kinds of things, so the same numbering system does not always make sense for the both. Where it does not make sense, the two systems do diverge. The numbers have four digits because three are not enough, because four are fairly easy to read at a glance and because the four seem to suit the need, allowing room for future growth. Old numbers, the Guide tries not to reuse for new purposes. However, we want no more than four digits if we can help it, so within the four-digit limit the Guide does retain the option to reassign numbers when and where needed. In and after version 1.0, non-experimental versions of the Guide which reassign numbers will at least increment the minor version number, as from 1.0 to 1.1, but no further guarantee is offered other than that the author won't disrupt established numbers without cause. Regarding the idea of a really permanent numbering scheme, the idea is fundamentally sound, but free-software development in the current era goes too fast for it. Someday the torrid development pace may settle. Then we'll increment the major version number and look at a freeze. WORK STILL NEEDED The nature of this Guide is such that its contents are nearly timeless: it covers mostly only basic, classic GNU/Linux commands. Nevertheless, new commands appear frequently, a few of which eventually prove significant enough to enter the Guide. Infrequently, the Guide should be updated accordingly. Although this Guide tells the general GNU/Linux user what commands to use, it would be better yet if it told Debian users which package to install to implement each command. Usually this is not a practical problem for the user, but occasionally a desired command can be hard to find. As it happens, the Debian Project's well engineered release practices are optimized to produce the best possible operating system rather than to make this particular document easy to maintain. If mandb(8) worked like dpkg(8), there would be no problem; but it doesn't, so there is. The author needs more volunteer help to index the commands to their packages for each Debian release in a timely fashion. Until then, the index must lag. When a command you want is not installed and it is not obvious which package installs it, you can (a) use the old index for the previous Debian release (chances are pretty good that the package name will be the same or nearly the same, so this usually works); (b) download and use the current dists/stable/Contents-i386 (or other Contents-) file from the Debian FTP archive (this almost always works, but the file is very large); (c) build your own Contents file with apt-move(8) and use it (this is a bit tricky to do, but again it almost always works; of course you have to install the `apt-move' package first); (d) wait for the author to produce an index for the current Debian stable release (but this will necessarily take a long time---maybe a year---and it doesn't work if the author happens to be hit by a bus); (e) study the matter, then if you feel up to it, volunteer to help the author so that we don't have this problem next time (the author prefers this option, but it's up to you); or (f) study the matter, be more clever than the author, think of a neat, reliable way to build the index automatically, and volunteer to help the author so that we don't have this problem next time (even better than option e). (If you are familiar with the Contents file, then you may find curious the implication of options b and c that the file almost but not quite always points you to the right package. The reason it's not quite always is twofold. First, some manpages---or rather, some whatis(1) entries---exist neither as files nor as proper symlinks, but only as internal references created by mandb(8) for itself. Second, a very few packages unfortunately generate manpage files or symlinks at installation time rather than at build time. Both kinds of manpage are real in the sense that "man foo" displays them, but Debian's Contents file has no practical way to track them. However, the cases where this is a practical problem are rare. In practice, the Contents file almost always reveals one or more packages which provide the desired command.) DOCUMENT HISTORY Having first installed Red Hat GNU/Linux 3.0.3 in 1996, the author found himself daunted at the hundreds or even thousands of available GNU/Linux commands. He began to take summary notes on the commands he found most interesting or used most often. As the notes grew and, in 1998, as the author migrated to Debian GNU/Linux 2.0, the author began categorizing then subcategorizing the commands. He added the four-digit command-ramification system in 2002. Having by 2002 received six years of iterative practice and refinement, the document had, without ever quite intending to do so, grown into a comprehensive, uniquely useful summary overview and classification of the many hundreds of important available GNU/Linux commands. Knowing of no other such catalog in existence, the author released version 0.1 (covering GNU/Linux through Debian 2.2r6) to the public May 2002 under the then-title Command Selection Howto. The release of Debian 3.0 and its surging, muscular horde of eight thousand software packages posed a growing administrative challenge to Debian users everywhere: Debian had grown so vast that it threatened to overrun its users in a chaotic sea of software. You knew that the package you wanted was in the horde somewhere, but how ever were you to find it? Seeing in this a larger problem related to the problem the Command Selection Guide had already addressed, the author undertook to bring order to the whole Debian horde by ramifying it, each package to its proper branch. The `debram' package and debram(1) resulted, and Version 0.2 of the Guide found its new home there November 2003. With the move to `debram', the Guide's principal change from version 0.1 to version 0.2 was to harmonize its own four-digit numbering system with debram(1)'s. It also dropped several obsolete commands, gained a very few new ones, and added an example illustrating bash(1)'s `function' builtin. Although version 0.3 tracked Debian's 3.0r2 release December 2003, it, version 0.4 the following month, and version 0.5 in August 2004, made little change to this document or to the Ramification itself. The three versions principally served to update the debram(1) program and to improve the Debram's Debian packaging. Giacomo Catenazzi sponsored version 0.4 for the Debian Project, making 0.4 the first to be uploaded to Debian's unstable archive. Version 0.3 was the last to be installable on a stable Debian 3.0 woody system; versions 0.4 and 0.5 looked forward to Debian sarge. Version 0.5, published as a part of Debian sarge, was the first to be included in an official stable Debian release. See `debram.txt' for further history. ACKNOWLEDGMENTS This Command Selection Guide's actual contents represent only a tiny fraction of the total skill and effort which have made the document useful. The vast majority of the total effort and skill, in fact, are found in the countless thousands of hours which many fine programmers, some wholly unsung, have selflessly given in creating and documenting the free programs which implement the hundreds of commands the Guide covers. Giacomo Catenazzi sponsored the author in introducing the `debram' package to Debian and showed the author how to improve the package and its contents in numerous ways. ABOUT THE AUTHOR Thaddeus H. Black holds Bachelor of Science and Master of Engineering degrees in electrical engineering from the University of Idaho. He also holds master electrician's and professional engineer's licenses in Virginia. Making his living in the American construction industry, Thaddeus is married since 1996 to the former Kristie Hancock. Thaddeus and Kristie have six children, Benjamin, Isaiah, Naomi, George, Cecil Quintus and Eleanor. COPYLEFT Copyright (C) 2002-2015 Thaddeus H. Black. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2. You probably already have this license's complete text on your computer in such a directory as `/usr/share/common-licenses/'; otherwise, you may download the text, if you want it, from any of many sources on the Internet, including (at the time of this writing) [ftp://ftp.gnu.org/gnu/Licenses/]. debram-2.0.0.4/docdata/README0000644000000000000000000000010112523713034012242 0ustar This directory contains cmdsel.txt, the Command Selection Guide. debram-2.0.0.4/debian/0000755000000000000000000000000012543262355011224 5ustar debram-2.0.0.4/debian/rules0000755000000000000000000000501012527335463012303 0ustar #!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Modified by Thaddeus H. Black for debram. out := debram out_data := $(out)-data docdata := docdata # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 export DEBRAM_OPTIM_LVL ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) DEBRAM_OPTIM_LVL := -O0 else DEBRAM_OPTIM_LVL := -O2 endif # The next line means to satisfy a Lintian warning. # It serves no other purpose. CFLAGS := $(shell dpkg-buildflags --get CFLAGS) build-arch: build-arch-stamp build-arch-stamp: dh_testdir $(MAKE) touch build-arch-stamp build-indep: build-indep-stamp build-indep-stamp: dh_testdir touch build-indep-stamp build: build-arch build-indep clean: dh_testdir dh_testroot rm -f build-arch-stamp build-indep-stamp build-stamp [ ! -f Makefile ] || $(MAKE) clean dh_clean install: DH_OPTIONS= install: build dh_testdir dh_testroot dh_prep dh_installdirs #dh_install src/$(out) usr/bin # Build architecture-independent files here. # Pass -i to all debhelper commands in this target to reduce clutter. binary-indep: build-indep install dh_testdir -i dh_testroot -i #dh_install -i $(docdata)/$(out).txt usr/share/$(out_data) dh_installdocs -i dh_installchangelogs -i dh_lintian dh_strip_nondeterminism dh_compress -i #usr/share/$(out_data)/$(out).txt #dh_link -i usr/share/$(out_data)/$(out).txt.gz \ # usr/share/doc/$(out_data)/$(out).txt.gz dh_fixperms -i dh_installdeb -i dh_gencontrol -i dh_md5sums -i dh_builddeb -i # Build architecture-dependent files here. binary-arch: build-arch install dh_testdir -a dh_testroot -a dh_installdocs -a dh_installchangelogs -a #for DOC in \ # $(out).txt \ # $$( sed -ne 's/^$(docdata)\///p' debian/$(out_data).docs ) \ #; do \ # dh_link -a usr/share/doc/$(out_data)/$${DOC}.gz \ # usr/share/doc/$(out)/$${DOC}.gz ; \ #done for DOC in \ $$( sed -ne 's/^$(docdata)\///p' debian/$(out_data).docs ) \ ; do \ dh_link -a usr/share/doc/$(out_data)/$${DOC}.gz \ usr/share/doc/$(out)/$${DOC}.gz ; \ done dh_link -a usr/share/doc/$(out_data)/README \ usr/share/doc/$(out)/README #dh_installman -a dh_lintian dh_strip -a dh_strip_nondeterminism dh_compress -a #dh_link -a usr/share/$(out_data)/$(out).txt.gz \ # usr/share/$(out)/$(out).txt.gz dh_fixperms -a dh_installdeb -a dh_shlibdeps -a dh_gencontrol -a dh_md5sums -a dh_builddeb -a binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install debram-2.0.0.4/debian/changelog0000644000000000000000000010462612543262354013106 0ustar debram (2.0.0.4) unstable; urgency=low * Replaced an inadvertently idiosyncratic DSC signature which Pbuilder disliked with a normal signature (closes: #789293). Thanked Daniel Schepler for the advice. -- Thaddeus H. Black Fri, 26 June 2015 00:00:00 +0000 debram (2.0.0.3) unstable; urgency=low * Fixed incorrect internal dependencies in debian/rules. -- Thaddeus H. Black Thu, 21 May 2015 00:00:00 +0000 debram (2.0.0.2) unstable; urgency=low * Moved to debian/rules the CFLAGS mentioned in changelog 2.0.0.1. * In a requested effort to let the package build reproducibly, added dh_strip_nondeterminism to debian/rules. * Removed Lintian overrides. -- Thaddeus H. Black Wed, 20 May 2015 00:00:00 +0000 debram (2.0.0.1) unstable; urgency=low * Added an otherwise unnecessary CFLAGS to the Makefile to try to avoid a maybe spurious Lintian warning. -- Thaddeus H. Black Mon, 11 May 2015 00:00:00 +0000 debram (2.0.0) unstable; urgency=low * Removed the Debram database proper, leaving mainly just the Command Selection Guide. * Slightly updated the Command Selection Guide. Noted however that the Guide's contents are quite old. * Appreciated A. Costa's interesting and highly literate wishlist bug report of nine years ago, yet noted here that if words like "metaramification" have not been fixed by this time, they probably never will be. If interest in this wishlist report persists, Costa or any other interested person can reopen the report, with my compliments. For now: (closes: #384953). * Noted here that Serafeim Zanikolas' wishlist bug report of seven years ago seems obviated by the removal of the main Debram data, besides which Zanikolas himself agreed in 2013 that there was no longer much point in the request. Thanked Zanikolas (closes: #482446). * Ceased to build the debram(1) tool, obviating the use of a C compiler during build. As far as the maintainer knows, this means that Clang is no longer interested in this package (closes: #757277). If this conclusion is incorrect, then Arthur Marble or any other interested person should feel free to reopen the bug report. Thanked Marble. * Thanked Samuel Thibault and Bart Martens for their timely NMUs. Read, then erased, the note to the maintainer Thibault left in the source. * Updated the package description. * Upgraded to build-depend on Debhelper 9. * Conformed to Standards Version 3.9.6. * Updated the Doc-base section to "Debian". * Slightly updated the HISTORY. * Removed cmdsel-debs.txt and maint.txt. * Did not remove the Makefile, but made it very brief, since there really is not much left for this Makefile to do. -- Thaddeus H. Black Sat, 09 May 2015 00:00:00 +0000 debram (1.0.3-0.2) unstable; urgency=low * Non-maintainer Upload. * Use source:Version instead of Source-Version to fix binNMU installability (Closes: Bug#677881). -- Samuel Thibault Tue, 19 Jun 2012 15:01:41 +0200 debram (1.0.3-0.1) unstable; urgency=low * NMU. * src/utf8.h: Include stddef.h. Closes: #453160. Patch by Kumar Appaiah , thanks. -- Bart Martens Sun, 09 Mar 2008 08:36:42 +0100 debram (1.0.3) unstable; urgency=medium * Uploaded post-freeze to sid for etch per Steve Langasek's permission [http://lists.debian.org/debian-release/2006/09/msg00224.html]. * Updated the ramification data to reflect etch as of this date. * Updated maint.txt. -- Thaddeus H. Black Sat, 23 Dec 2006 22:00:00 +0000 debram (1.0.2) unstable; urgency=medium * Updated the ramification data to reflect etch as of this date. * Updated maint.txt. -- Thaddeus H. Black Sat, 25 Nov 2006 22:00:00 +0000 debram (1.0.1) unstable; urgency=medium * Updated the ramification data to reflect etch as of this date. * Empirically observed that the daily refresh of Debian's FTP archive seemed to run between 18:00 and 22:00 GMT (UTC); that is, that packages uploaded by 18:00 came early enough for the refresh, whereas Packages, Sources and Contents files had been built at least for the i386 and amd64 archs by 22:00 (although these do not actually appear on the Push-Primary mirrors until several hours later). Delayed debram's daily changelog timestamp to 22:00 GMT for this reason. (One could ask A.J. Towns for more precise hours, but really, the matter does not seem important enough to bother him about.) * Planned tentatively to track the amd64 Packages file, in addition to the i386, for etch+1, but noted that etch debram does not track packages unavailable in i386. * Corrected the spelling of [9358 System Administration under Gnome]. * Updated maint.txt. * Referred to the debram (1.0.0) changelog to explain the upload's medium urgency. * Noted that this is probably the last unstable upload toward etch, but that by Debian Release Manager's permission, one extraordinary upload toward etch remains planned during the three weeks following Debian's general freeze. (See the 1.0.0 changelog.) -- Thaddeus H. Black Fri, 06 Oct 2006 22:00:00 +0000 debram (1.0.0) unstable; urgency=medium * As proposed in the last changelog, advanced at last to version 1.0.0. * Also as proposed in the last changelog, advanced debram's ordinary upload urgency to the medium level, due to the essential perishability of debram's data. (The maintainer knows of the Debian Project's internal development autobuilder sequencing algorithm, but notes that autobuilder priority is not what motivates this change. What motivates it is that debram brings perishable metadata *on other packages,* which puts it in almost a unique position among Debian packages. Little purpose is served by letting the metadata languish ten days in unstable. Although debram is somewhat a bulky package, most of the bulk is data not code. Debram does not heavily load the autobuilders in any case.) Observed that significant updates to the debram(1) executable, if such occurred, would drop the urgency back to low. * Planned per Steve Langasek's permission [http://lists.debian.org/debian-release/2006/09/msg00224.html] to update debram during the three weeks following Debian's general freeze. Observed that although this will not allow debram perfectly to track the stable release, it should help significantly, inasmuch as debram during those three weeks will have an almost stationary target to track. * Updated the ramification data to reflect etch as of this date. * Linked a few more ramification cross-references (See Also). * Rewrote "Updating the library data" in the manpage again. * Very slightly revised the commentary in docdata/cmdsel.txt. * Caused helper/new-debram-body, when it encounters an unknown maintainer name, to delay dying until it has gathered also all the other unknown maintainer names which could cause it to die. Let it print all these names together at once to stderr, in both utf-8 and iso-8859-1 character encodings. * Updated maint.txt. -- Thaddeus H. Black Mon, 18 Sep 2006 21:00:00 +0000 debram (0.7.0) unstable; urgency=low * Updated the ramification data to reflect etch as of this date. * Acknowledged Anoop Rajendra for ramifying some of the new packages. * Observed that this could be version 1.0.0, but cautiously numbered it 0.7.x for the moment. Noted that future uploads before the etch release are likely to be marked urgency=medium, due to their perishable data. * Retreated from the post-1.0 version-numbering plan set forth in the 25 Feb 2006 changelog. (It was a worthy idea, but premature. The proposal was too rigid for the demands of the present era of Debian development.) Noted that big future reforms to the ramification plan would still increment at least the minor version number, but did not strictly define what might constitute a big reform. * For post-release stable ramification updates, undertook not to depart from the stable version number, but only to add a letter to it, as "1.2.3a". (See "Updating the library data" in the manpage. Letters on non-stable numbers will continue to denote experimental versions, but in the future never on stable numbers. For example, if Debian stable included debram 1.2.3, then debram 1.2.3a would be a stable ramification update. An experimental debram would take the number 1.2.4a.) * Refined the ramification plan as follows. - Added the new [1273 Text Indexing and Searching]. - Added the new [1458 General Mathematical Documentation]. - Added the new [1474 Chemistry]. - Retitled [1792 Debian Jr] to [1792 Debian Jr and Edu]. - Added the new [2740 Vserver and Xen]. - Retitled [2790 GNU Hurd] to [2790 GNU Hurd and kFreeBSD]. - Split the old [3187 Other Revision Control] into three new branches: [3187 Other Centralized Revision Control]; [3188 Arch/Tla/Bazaar]; and [3189 Other Decentralized Revision Control]. - Retitled [3210 Fortran 77] to [3210 Fortran]. - Added the new [3686 Perl 6] and [3688 GHC Haskell]. - Added the new [4456 Proprietary Input Devices]. - Retitled [4730 PCMCIA, APM and Other Mobile Devices] to [4730 Notebook Computers], and split it into several branches. - Replaced the old [6100 Game Programming] division, which had no groups or branches, with the new [6100 General Game Support and Programming] division. Subdivided the new division into [6110 Game Programming], [6160 General Network Game Service], and [6170 Other General Game Support]. - Added the new [7600 Scripture, Philosophy and Religion] division with its several groups, all of which were new. - Added the new [7820 Non-US, Non-GB English]. - Added the new [8420 Mono]. - Retitled [8690 Multicasting and Adaptive Communications] to [8690 Videoconferencing, Multicasting and Adaptive Comms]. - Retitled [8730 SNMP and Networked Boot Control] and [8740 Bootp / DHCP] to [8730 SNMP, Clusters and Networked Boot Control] and [8740 DHCP / Bootp], respectively. - Added the new [9355 Evolution]. - Retitled [9474 Xfce4] to [9474 Xfce]. - Added the new [9654 X Audio/Music Synthesis]. * Shifted the basic C++ database libraries from 3820 and 3920 to 3840 and 3940. * Updated the ramification cross-references (See Also). * Updated the man page. * Noted here a correction to the previous changelog entry: s/check-cmdsel-debs.data/cmdsel-debs.data/. * Slightly corrected docdata/cmdsel.txt and docdata/cmdsel-debs.txt. * In helper/: - Slightly updated DescLoc. - Extended helper/ramify-whatis to work with apt-ftparchive(1) output. - Added the new -k option to helper/new-debram-body. - Added the new -j option to helper/ramify-whatis. - Added the new script count-deps. - Added the new script filter-debram-body. - Added the new script list-words-cont. * Updated maint.txt. * Adhered to Policy 3.7.2. -- Thaddeus H. Black Thu, 24 Aug 2006 21:00:00 +0000 debram (0.6.5a) experimental; urgency=low * In a change of plan, began to update debram for etch. Noted that 0.6.5 would not seem to be the last debram, after all. * Observed that sarge stable users should keep debram 0.6.x installed; that they should not update to 0.7.x or later, which concern packages not even in sarge. * Undertook in and after version 1.0 at least to increment the minor version number (as from 1.0 to 1.1) when rams move or ram numbers are reassigned. Noted however that patchlevel incrementation (as from 1.1.0 to 1.1.1) may still suffice for some smaller changes to the ramification plan, such as clarifications or small changes to ram titles and, in some cases, the splitting of existing rams, the opening of new ones or the removal of obsolete ones. Explained that the intent in and after 1.0 is to stabilize the ramification plan so far as the rapid ongoing pace of Debian development permits; yet to the extent that it does not permit, at least to increment version numbers appropriately. * Removed GFDL licensing. (All of debram has been and continues to be licensed under GPL-2, but for historical reasons parts of it had been unnecessarily, confusingly been licensed in parallel under GFDL-1.1, too.) * Adhered to Policy 3.6.2.1. * Revised the source generally, the revisions including the following. - Reorganized the source directories. - Updated the manpage. - Revised helper/RelSteps. - Factored common definitions from the several helper scripts. - Reformatted the several helper scripts. Made several further corrections and changes there. - Pointed readers of debian/copyright to the Debian archive rather than to the author's personal website for the latest source. - In src/xref.c, changed "The Ramification's Principal Classes" to "The Ramification's Principal Sections". - In src/argp.c, slightly improved the --help list footer. - Added the new helper/test hierarchy, containing some test data for the developer's convenience. (What future use such test data might be put to is not known; for the present only helper/ramify-whatis is configured to use it.) Noted here that future changes to helper/test will probably be regarded as too trivial to burden this changelog with; helper/test will not normally be tracked here. - In helper/, added the new scripts find-cmdsel-dupes, check-cmdsel-debs-data and cmdsel-debs, plus the data file check-cmdsel-debs.data for the last script. - Extended helper/check-ram-titles to check cmdsel.txt as well as debram.txt. - Fixed helper/buff-expand's response to illegal options. - Slightly improved helper/Alpha.pm's sorting of names having several capital letters, so that it correctly sorts "Tm Test" before "Tm TESTA" despite the capital "E" in the latter. - Let helper/update-date work also on the README. - Added appropriate "Notes on the Ramification Numbering System" to the backmatter of both debram.txt and cmdsel.txt. * Refined the ramification plan as follows. - Totally reramified [3600 Perl], from four branches into thirty-one, largely without regard to the old 3600 ramification plan. - Similarly totally reramified [3500 Python], from four branches into twenty-seven. - Added development notes relevant to the previous two points in the new file helper/PerlPythonNotes. - Split the old [1122 Text Scanning and Filtering] into separate scanning and filtering branches. Consequently, because the last free number in the [1120 Text Commands] group was the unsuitable 1129, renumbered the other branches in the group to make room for the split. - Split [1211 Compression, Archival and Text/Data Codec] into three branches: 1211, 1215 and 1217. - Promoted [1245 Emacs] to a group: 1290. Subramified the new group. - Reorganized the [1250 Console and TTY] group. - Added the new [1315 CUPS]. - Subramified [1320 Fonts]. - Reramified [1350 TeX] from two branches to nine. - Because [1640 Network Clients and Servers] had no more branch numbers available, removed [1642 FTP] therefrom, giving it its own new group: 1630. Reserved the newly available number 1642 for future use. - Subramified [2210 Kernel Control and Management of Central Hardware]. - Added the new [3273 Haskell]. - Retired [4476 X-10], merging its remaining packages into [4477 Further Unusual or Specialized Devices]. - Shifted [1313 PDF] to 1314, the better to accommodate related cmdsel.txt numbering . - Split the new [1276 Gettext] out from ram 1126. - Split [1115 File Moving, Copying and Naming] into [1115 File Moving and Naming] and [1116 File Copying]. - Created the new group [3150 Message Passing, ORB, and Interface Definition], shifting the old ORB rams 3117 and 3147 thereto and adding the new [3151 Dbus] branch. - Added the new [8627 Further Network Foundation]. (At the moment, the branch remains empty, but it is a logical branch and its analog 1627 in cmdsel.txt is not empty.) - Subramified [1180 Date and Time]. * Thoroughly revised and updated cmdsel.txt, which naturally lags, to track Debian 3.1r0a. * Added version 0.1.1 of the author's otherwise unpackaged DebParse Perl modules in the new helper/debparse/. (This is not Debram software as such, but as far as the author knows it has never been used anywhere but in Debram development, so as it is unpackaged elsewhere it seems logical to keep it here with the Debram source.) * Updated the author's e-mail address here, in debian/control, in src/argp.c, and elsewhere. * Updated maint.txt. -- Thaddeus H. Black Sat, 25 Feb 2006 00:00:00 +0000 debram (0.6.5) unstable; urgency=low * Aggregated the changes in experimental versions 0.6.4a through d for official release to unstable (see those changelog entries). * Observed here that although further bugfixes are not impossible, neither are they expected; and that barring an urgent need, debram 0.6.5 is expected to the the last debram. * Offered admins the following counsel. - Sarge stable admins should install the binaries debram 0.6.4 (distributed with sarge) and debram-data 0.6.5. - Sarge stable admins may build and install their own local debram 0.6.5 binaries. This works fine; the source is already properly backported. However, building one's own debram 0.6.5 binary is unnecessary. If unsure, follow the advice in the previous point. - Etch testing and sid unstable admins should install debram 0.6.5 and debram-data 0.6.5. They should also probably install debtags. - Although etch includes debram, most etch stable admins probably do not need it. Instead, they can and should install debram's improved replacement debtags. - Etch+1 admins (and sid admins in the era following etch's release) do not need debram and, unless they have some unusual historical interest, should not install it. * Observed here that debram, useful for sarge users, is less useful post-sarge and is planned to be removed from Debian after etch's release. -- Thaddeus H. Black Wed, 14 Sep 2005 00:00:00 +0000 debram (0.6.4d) experimental; urgency=low * Observed here that this experimental release is a candidate for 0.6.5 release to sid three days to three weeks from today, if no further bugs emerge in the meantime. * Updated the FSF's postal address in debian/copyright. -- Thaddeus H. Black Sat, 03 Sep 2005 00:00:00 +0000 debram (0.6.4c) experimental; urgency=low * Observed here that this experimental release is a candidate for 0.6.5 release to sid three days to three weeks from today, if no further bugs emerge in the meantime. * Rebuilt debram.txt from the concatenated Packages files included with the official Debian 3.1r0a i386 CD set. (The concatenated CD Packages files are substantially similar to the FTP Packages file. With respect to one or two packages of optional or extra Priority, however, the CDs and FTP seem to disagree on the exact package Priority. Why? Don't know. Haven't investigated. The difference admittedly does not amount to much. Anyway, this debram build follows the CDs.) * Slightly modified maint.txt and helper/new-debram-body to handle correctly the concatenated CD Packages file. -- Thaddeus H. Black Wed, 31 Aug 2005 00:00:00 +0000 debram (0.6.4b) experimental; urgency=low * Taking advantage of the helpful fact that sarge was now stable, reviewed the ramification top to bottom, correcting two or three hundred misramifications. Observed that this was meant to be the last such general review. * Subdivided the 1740 and 9150 rams. * Added a few new cross-references between rams. * Added a new BUILDING text file, setting forth some notes relevant to users who want to build their own debram packages. * Added a new helper/RelSteps text file, outlining the steps the author typically takes in preparing a new debram release. * Added a minor iconv(3)-like capability to helper/new-debram-body. * Slightly corrected maint.txt. -- Thaddeus H. Black Thu, 4 Aug 2005 00:00:00 +0000 debram (0.6.4a) experimental; urgency=low * Observed here that this is the first issue after sarge's release. Noted that the debram-data package issued here is fully compatible with sarge's debram (0.6.4) package, and that it is expected (and supported and recommended) that many sarge debram users will upgrade debram-data but not debram. * Observed here that the significance of this experimental issue and of the forthcoming 0.6.5 issue is that, unlike the 0.6.4 issue actually shipped with sarge, these later issues fully cover sarge. (The final sarge package list became available only just before sarge's release, by which time of course it was too late to update debram-data in sarge. This was expected and planned. Thus this issue, and the forthcoming 0.6.5.) * Updated the ramification data to cover all binary packages in sarge stable main i386. * Added a few new cross-references between rams. Clarified the title of ram 8141. Corrected a handful of package misramifications. * Edited the manpage significantly, reflecting the circumstances prevailing after sarge's stable release. Among other changes, - deleted the "Updating the Library Data" section; - revised the "Bugs" section; and - added a notice that the -c option does not work well on terminals with white backgrounds. * Extended the Document History appropriately at debram.txt's foot. * Deleted one now unneeded helper script. Slightly improved one or two of the others. * To avoid confusion for sarge users upgrading debram-data, refrained from updating the maintainer's e-mail address here to (the maintainer is an official Debian Developer as of this issue). * Updated maint.txt to include all sarge package maintainers. * Observed here that the source is fully buildable on a sarge stable system, without any backporting modification. Undertook to maintain such clean backportability for all 0.6.x issues. -- Thaddeus H. Black Sat, 18 Jun 2005 00:00:00 +0000 debram (0.6.4) unstable; urgency=medium * Prepared this upload pursuant to - http://lists.debian.org/debian-devel-announce/2005/04/msg00003.html - http://lists.debian.org/debian-release/2005/04/msg00029.html - http://lists.debian.org/debian-devel/2005/04/msg00161.html and the discussion threads descending therefrom. Expected this issue to be the final issue before sarge's release. * Updated the ramification data to reflect sarge as of this date. * Excepting a handful of packages at their maintainers' request, purged data for packages not in sarge. * Updated maint.txt. -- Thaddeus H. Black Sat, 2 Apr 2005 21:00:00 +0000 debram (0.6.3) unstable; urgency=low * Updated the ramification data to reflect sarge as of this date. * Updated maint.txt. * Added some minor new development helper scripts, including helper/update-ver and helper/update-date. -- Thaddeus H. Black Wed, 9 Feb 2005 21:00:00 +0000 debram (0.6.2a) experimental; urgency=low * Added automatic locale support (with Maciej Dems). -- Thaddeus H. Black Thu, 3 Feb 2005 00:00:00 +0000 debram (0.6.2) unstable; urgency=low * Updated the ramification data to reflect sarge as of this date. * Updated maint.txt. * Implemented debram(1)'s -u option to support utf-8 I/O. (Maciej Dems' good advice is acknowledged in this.) * Implemented debram(1)'s -. option. * Extended the manpage's list of library-data download sites. * Uncluttered debram(1)'s --help list somewhat by hiding a few rarely-used options (the manpage still documents them). -- Thaddeus H. Black Mon, 24 Jan 2005 21:00:00 +0000 debram (0.6.1) unstable; urgency=low * Updated the ramification data to reflect sarge as of this date. * Updated maint.txt. -- Thaddeus H. Black Fri, 3 Dec 2004 21:00:00 +0000 debram (0.6.0) unstable; urgency=low * Included the new sarge debram.txt, with sarge packages ramified per the new sarge ramification plan. * Because debram.txt now presents current data, removed the "Priority: extra" from debian/control, reverting to "Priority: optional". * Reformed the binary packages' Descriptions. In particular, gave debram-data its own distinct Description and removed the now-obsolete woody disclaimer. * Updated the manpage to cover the new sarge data issue. * Sorted team-maintained packages to the head of each ram, except "Tm QA" packages, which are sorted to the foot. * Updated debian/README. * Updated and extended the development helper scripts. * At last understanding Colin Watson's suggestion of three months ago, fixed the various development helper scripts to use FindBin to locate Perl modules and other files relative to the helper/ directory. * Updated maint.txt. -- Thaddeus H. Black Mon, 8 Nov 2004 21:00:00 +0000 debram (0.5.2) unstable; urgency=low * Reprioritized the list of sites from which users can download future debram data. * Applied Gustavo Franco's manpage patch, correcting the reference in the Files section from /usr/lib/debram/ to /usr/share/debram/ (closes: #276577). * Updated and shortened the manpage's Bugs section. * Added appropriate acknowledgements to the manpage's Author section. * Revised the manpage in several other minor respects. * Relaxed the source's Build-Dependency on debhelper, making the same debram source equally buildable on woody, sarge and sid platforms. * Added the new helper scripts check-maint-addr and check-ram-titles; added the new -tmT options to the helper script new-debram-body; fixed the helper script buff-expand, stopping it from touching the revision timestamps of files it does not alter; edited other helpers in minor ways. * Updated maint.txt. -- Thaddeus H. Black Tue, 26 Oct 2004 00:00:00 +0000 debram (0.5.1) unstable; urgency=high * Credited Martin Pitt here for discovering the need for the following five changes. * In the debram-data binary, moved debram.txt from /usr/share/doc/debram-data/ to /usr/share/debram-data/, to comply with Policy sect 12.3 (closes: #272422). * In the debram binary, symlinked the platform- independent `debram.txt.gz' from /usr/share/debram/ rather than /usr/lib/debram/, to comply with FHS sect 4.7. * Removed unneeded empty maintainer scripts (debhelper creates suitable default maintainer scripts automatically). * To comply with Policy sect 10.1, altered `Makefile' and debian/rules - always to compile with debugging symbols (except during a local, non-packaging build), stripping unwanted symbols after compilation; and - to respect "noopt" in DEB_BUILD_OPTIONS. * Removed superfluous "configure" target from debian/rules. * Because data files have moved (see above), controlled debram-data to Conflict against old debram (<< 0.5.1). (Future debram-data are to be compatible with any debram (>= 0.5.1). If an incomptatible debram-data emerged, it would be versioned at least 0.7.) * Slightly simplified the binary package interdependencies per Giacomo Catenazzi's advice. * To avoid abusing the present "urgency=high" upload, deferred further, non-urgent changes. -- Thaddeus H. Black Mon, 20 Sep 2004 22:30:00 +0000 debram (0.5.0) unstable; urgency=low * Undertook not to change the format of `debram.txt' in 0.5.x or 0.6.x, thus enabling users (per Giacomo Catenazzi's suggestion) later to install new `debram-data' packages or even just to load new `debram.txt' files without upgrading the `debram' package. For this reason, incremented the minor version number to 0.5. * Planned to number the upcoming complete sarge ramification 0.6, to distinguish it from the present 0.5 which lacks complete sarge coverage. * Because the debram binary package no longer depends on a specific version of debram-data, gave debram its own copies of the copyright and changelog.gz files. (Refer to Policy sects 12.5 and 12.7.) * Restricted the package license to GPL version 2, rather than GPL version 2 or later, thus withdrawing from the FSF its unique privilege to extend the license. * Implemented debram(1)'s -t option. * Added to the man page instructions on finding and installing the complete sarge ramification data, when they become available. * Extended the man page's Quick Start section. Also, had the man page refer contributors to debtags-devel@lists.alioth.debian.org rather than to Thaddeus. Edited and updated the page in a few other minor ways. * Merged into debian/rules Giacomo Catenazzi's patch to clean stray build stamps. * Added a HISTORY file per Enrico Zini's suggestion. * With Nick Lewycky's help, made the scripts `helper/new-debram-body' and `helper/sort-maint' fully relocatable. * Updated `maint.txt'. -- Thaddeus H. Black Mon, 2 Aug 2004 00:00:00 +0000 debram (0.4.2) unstable; urgency=low * Observed here that this issue is principally a minor bugfix issue, and that more substantive modifications are deliberately held back against the apparent imminence of Debian sarge's release. (Felt that a risk of introducing new bugs along with new features seemed a poor gamble at the moment.) * Disambiguated ram 8657's title from "Other Mail" (which was also ram 1657's title) to "Other Mail Transport". * Unswapped debram(1)'s seldom-used --data-file and --data-file-gz command-line options. * Corrected `prdeb.c' print_deb()'s inadvertent wasting of one available output column under the `-w' command-line option. * Fixed `conv.c' undot()'s edge-case handling. * Improved the source code's style slightly in a handful of spots. * Updated `maint.txt'; corrected one maintainer's name in `debram.txt'. * Corrected and extended the helper script `helper/new-debram-body''s documentation. * Added to the manpage's Bugs section additional remarks about the debram's future plans. * Conformed to Standards Version 3.6.1. -- Thaddeus H. Black Sat, 26 Jun 2004 00:00:00 +0000 debram (0.4.1) unstable; urgency=low * Corrected `debian/control' to include a build-dependency on `zlib1g-dev'. Closes #231100. -- Thaddeus H. Black Fri, 6 Feb 2004 00:00:00 +0000 debram (0.4.0) unstable; urgency=low * Incremented the version number to 0.4.0 for sponsor Giacomo Catenazzi's upload to Debian's unstable archive. Updated the various package dates, histories and version notations accordingly but made no other changes to the package. -- Thaddeus H. Black Fri, 23 Jan 2004 00:00:00 +0000 debram (0.3.1e) experimental; urgency=low * Corrected and neatened `helper/new-debram-body' in several small ways. Improved its error messages generally. Added and documented the useful new "unknown maintainer" error message. Added the -w option. * Updated `maint.txt'. * Updated the manpage's Bugs section. * Added some nomenclature to the manpage's Ramification section. -- Thaddeus H. Black Tue, 20 Jan 2004 00:00:00 +0000 debram (0.3.1d) experimental; urgency=low * Removed the `author/' directory and added the new `helper/' directory. The old directory had contained undocumented scripts and other files which probably were useless to anyone but the author. The new directory contains documented scripts and files potentially useful to any debram developer. * In `debian/control', added explicit Section and Priority data to each binary paragraph; removed the Enhances datum. * Updated `maint.txt' to include all the names of sarge's current maintainers. (Debian sarge is in testing at the time of this writing.) -- Thaddeus H. Black Fri, 16 Jan 2004 00:00:00 +0000 debram (0.3.1c) experimental; urgency=low * Removed `author/author.tar'. * Corrected FTP link in `debian/copyright'. * Per Giacomo Catenazzi's suggestion, added error checking to all the program's calls to malloc(3) and calloc(3). (See `alloc.h'.) * Conformed to Standards Version 3.5.10. * Configured the source to build with debhelper 4.1. (This means that the source now builds for sarge only, not woody. Debian 3.0 woody users should install the old debram 0.3.1.) * Retagged `cmdsel.txt' for doc-base. -- Thaddeus H. Black Mon, 5 Jan 2004 00:00:00 +0000 debram (0.3.1) unstable; urgency=low * Tracked Debian's 3.0r2 issue. * Slightly altered the sorting of package names within a ram, letting packages from the same source appear sequentially. * Corrected five or six misramifications. * Because the debram's own control file refers to them, added packages `debram-data' and `debtags' (`debram' had already been added in 0.2.0). * Corrected color output to xterm(1). * Noted here for historical interest that a debram 0.1.0 did exist, but that it consisted solely of the unpackaged file `cmdsel.txt'. Its issue date was 29 May 2002. While it was not then a Debian package and was not called `debram', it is the direct antecedent of today's debram package. -- Thaddeus H. Black Fri, 26 Dec 2003 00:00:00 +0000 debram (0.3.0) unstable; urgency=low * Recast the source as a native Debian package. * Split the data files away into a separate, architecture-independent binary package `debram-data'. * Added new -1 and -s options to debram(1). * Extended debram(1)'s -T option to enhance -d and -m. * Extended debram(1)'s -d and -m options to accept ram specification. * Trimmed and updated debram(1)'s manpage. -- Thaddeus H. Black Mon, 15 Dec 2003 13:14:07 +0000 debram (0.2.0-1) unstable; urgency=low * Initial Release. -- Thaddeus H. Black Mon, 24 Nov 2003 02:36:26 +0000 Local variables: mode: debian-changelog End: debram-2.0.0.4/debian/source/0000755000000000000000000000000012523726717012531 5ustar debram-2.0.0.4/debian/source/format0000644000000000000000000000000412523726717013736 0ustar 1.0 debram-2.0.0.4/debian/copyright0000644000000000000000000000171512523734561013164 0ustar This is debram, written and maintained by Thaddeus H. Black on Mon, 15 Dec 2003 13:14:07 +0000. The original source can always be found at: ftp://ftp.debian.org/dists/unstable/main/source/ Copyright (C) 2002-2015 Thaddeus H. Black This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. 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 with the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL-2. The Free Software Foundation, Inc., can be contacted if desired at 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. debram-2.0.0.4/debian/compat0000644000000000000000000000000212523714233012415 0ustar 9 debram-2.0.0.4/debian/debram-data.docs0000644000000000000000000000005212523714123014225 0ustar README docdata/HISTORY docdata/cmdsel.txt debram-2.0.0.4/debian/debram-data.doc-base.debram-cmdsel0000644000000000000000000000032112523726353017457 0ustar Document: debram-cmdsel Title: Command Selection Guide Author: Thaddeus H. Black Abstract: Ramified catalog of GNU/Linux commands Section: Debian Format: text Files: /usr/share/doc/debram-data/cmdsel.txt.gz debram-2.0.0.4/debian/control0000644000000000000000000000304712527060462012630 0ustar Source: debram Section: admin Priority: optional Maintainer: Thaddeus H. Black Build-Depends: debhelper (>= 9), dh-strip-nondeterminism (>= 0.003) Standards-Version: 3.9.6 Package: debram Section: admin Priority: optional Architecture: any Depends: ${misc:Depends}, debram-data (>= ${source:Version}) Suggests: debtags Description: ramified catalog of available commands Debian GNU/Linux provides thousands upon daunting thousands of commands. Sorting them into broad classes then dividing and redividing them into finer, more specific branches, the Debram ramifies Debian's commands in much the same manner as a university library ramifies its books. If you know what you want your computer to do but do not yet know the command to do it, you can find the command here. . (The Debram package used also -- indeed mainly -- to include a much larger and more important ramification of Debian *packages,* along with a browsing tool; but Debtags has superseded Debram in those respects. What the Debram package still includes however is the Command Selection Guide, which though somewhat outdated may still be of use.) Package: debram-data Section: admin Priority: optional Architecture: all Depends: ${misc:Depends} Recommends: debram (>= 0.5.1) Conflicts: debram (<< 0.5.1) Description: debram's architecture-independent data This data package installs the Debian Ramification's documentation and architecture-independent data. It also provides the Command Selection Guide, ramifying several hundred basic GNU/Linux commands. See debram. debram-2.0.0.4/Makefile0000644000000000000000000000003612527060473011440 0ustar all: clean: .PHONY: all clean debram-2.0.0.4/README0000644000000000000000000000207312523715410010655 0ustar ------------------------------------------------------------------------------- The Debian package debram ------------------------------------------------------------------------------- Debian GNU/Linux provides thousands upon daunting thousands of commands. Sorting them into broad classes then dividing and redividing them into finer, more specific branches, the Debram ramifies Debian's commands in much the same manner as a university library ramifies its books. If you know what you want your computer to do but do not yet know the command to do it, you can find the command here. (The Debram package used also -- indeed mainly -- to include a much larger and more important ramification of Debian *packages,* along with a browsing tool; but Debtags has superseded Debram in those respects. What the Debram package still includes however is the Command Selection Guide, which though somewhat outdated may still be of use.) ------------------------------------------------------------------------------- Thaddeus H. Black , Sat, 09 May 2015 00:00:00 +0000