ruby-debian 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- data/Makefile +47 -0
- data/README +55 -0
- data/TODO +29 -0
- data/bin/dpkg-checkdeps +163 -0
- data/bin/dpkg-ruby +148 -0
- data/debian/changelog +310 -0
- data/debian/compat +1 -0
- data/debian/control +56 -0
- data/debian/copyright +26 -0
- data/debian/dirs +2 -0
- data/debian/manpages +0 -0
- data/debian/ruby-debian.docs +3 -0
- data/debian/ruby-debian.examples +1 -0
- data/debian/ruby-debian.manpages +2 -0
- data/debian/rules +15 -0
- data/debian/source/format +1 -0
- data/examples/ONE_LINER +39 -0
- data/examples/dpkg.rb +95 -0
- data/examples/list_packages.rb +38 -0
- data/examples/unmet_packages.rb +39 -0
- data/ext/debian_version/Version.cpp +43 -0
- data/ext/debian_version/extconf.rb +7 -0
- data/lib/debian.rb +1063 -0
- data/lib/debian/ar.rb +159 -0
- data/lib/debian/utils.rb +111 -0
- data/man/dpkg-checkdeps.1 +102 -0
- data/man/dpkg-ruby.1 +99 -0
- data/t/d/available +492 -0
- data/t/d/non-US_sid_Sources +32 -0
- data/t/d/non-US_sid_i386_Packages +50 -0
- data/t/d/sid_Sources +287 -0
- data/t/d/sid_i386_Packages +456 -0
- data/t/d/status +324 -0
- data/t/d/w3m-ssl_0.2.1-1.f +24 -0
- data/t/d/w3m-ssl_0.2.1-2.dsc +12 -0
- data/t/d/w3m-ssl_0.2.1-2.f +24 -0
- data/t/d/w3m_0.2.1-1.dsc +12 -0
- data/t/d/w3m_0.2.1-1.f +21 -0
- data/t/d/w3m_0.2.1-2.dsc +12 -0
- data/t/d/w3m_0.2.1-2.f +21 -0
- data/t/d/w3m_met_list +83 -0
- data/t/testall.rb +50 -0
- data/t/testar.rb +59 -0
- data/t/testarchives.rb +277 -0
- data/t/testdeb.rb +239 -0
- data/t/testdep.rb +70 -0
- data/t/testdepterm.rb +140 -0
- data/t/testdepunmet.rb +71 -0
- data/t/testdpkg.rb +197 -0
- data/t/testdpkgdeb.rb +83 -0
- data/t/testdsc.rb +49 -0
- data/t/testfield.rb +155 -0
- data/t/testpackages.rb +138 -0
- data/t/testsources.rb +44 -0
- data/t/teststatus.rb +38 -0
- metadata +133 -0
data/lib/debian/ar.rb
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
#
|
2
|
+
# ar.rb - ar(1) ruby interface (for debian.rb)
|
3
|
+
# Copyright (c) 2001 Fumitoshi UKAI <ukai@debian.or.jp>
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 2 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
#
|
19
|
+
# $Id: ar.rb,v 1.3 2003/10/07 17:07:02 ukai Exp $
|
20
|
+
#
|
21
|
+
|
22
|
+
# struct ar_hdr
|
23
|
+
# {
|
24
|
+
# char ar_name[16]; /* Member file name, sometimes / terminated. */
|
25
|
+
# char ar_date[12]; /* File date, decimal seconds since Epoch. */
|
26
|
+
# char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal. */
|
27
|
+
# char ar_mode[8]; /* File mode, in ASCII octal. */
|
28
|
+
# char ar_size[10]; /* File size, in ASCII decimal. */
|
29
|
+
# char ar_fmag[2]; /* Always contains ARFMAG. */
|
30
|
+
# };
|
31
|
+
|
32
|
+
module Debian
|
33
|
+
class ArError < StandardError; end
|
34
|
+
class Ar
|
35
|
+
ARMAG = "!<arch>\n"
|
36
|
+
SARMAG = 8
|
37
|
+
ARFMAG = "`\n"
|
38
|
+
AR_HDR_SIZE = (16+12+6+6+8+10+2)
|
39
|
+
class ArFile
|
40
|
+
class Stat
|
41
|
+
def initialize(time,uid,gid,mode,size,dev)
|
42
|
+
@time, @uid, @gid, @mode, @size, @dev = time,uid,gid,mode,size,dev
|
43
|
+
end
|
44
|
+
def <=>(s) @time <=> s.atime; end
|
45
|
+
def atime; @time; end
|
46
|
+
def blksize; 0; end
|
47
|
+
def blockdev?; false; end
|
48
|
+
def blocks; 0; end
|
49
|
+
def chardev?; false; end
|
50
|
+
def ctime; @time; end
|
51
|
+
def dev; @dev; end
|
52
|
+
def directory?; false; end
|
53
|
+
def executable?; false; end
|
54
|
+
def executable_real?; false; end
|
55
|
+
def file?; true; end
|
56
|
+
def ftype; 'file'; end
|
57
|
+
def gid; @gid; end
|
58
|
+
def grpowned?; false; end
|
59
|
+
def ino; @dev; end
|
60
|
+
def mode; @mode; end
|
61
|
+
def mtime; @time; end
|
62
|
+
def nlink; 1; end
|
63
|
+
def owned?; false; end
|
64
|
+
def pipe?; false; end
|
65
|
+
def rdev; @dev; end
|
66
|
+
def readable?; true; end
|
67
|
+
def readable_real?; true; end
|
68
|
+
def setgid?; false; end
|
69
|
+
def setuid?; false; end
|
70
|
+
def size; @size; end
|
71
|
+
def size?; @size == 0 ? nil : @size; end
|
72
|
+
def socket?; false; end
|
73
|
+
def sticky?; false; end
|
74
|
+
def symlink?; false; end
|
75
|
+
def uid; @uid; end
|
76
|
+
def writable?; false; end
|
77
|
+
def writable_real?; false; end
|
78
|
+
def zero?; @size == 0; end
|
79
|
+
end
|
80
|
+
|
81
|
+
def initialize(fp,name,date,uid,gid,mode,size,pos)
|
82
|
+
@fp,@name = fp,name
|
83
|
+
@stat = Stat.new(date,uid,gid,mode,size,pos)
|
84
|
+
@size = size
|
85
|
+
@pos = pos
|
86
|
+
@cur = 0
|
87
|
+
end
|
88
|
+
attr_reader :name, :size, :pos, :cur, :stat
|
89
|
+
|
90
|
+
def read(size = -1)
|
91
|
+
if size < 0
|
92
|
+
size = @size - @cur
|
93
|
+
end
|
94
|
+
if @cur + size > @size
|
95
|
+
size = @size - @cur
|
96
|
+
end
|
97
|
+
@fp.seek(@pos + @cur, IO::SEEK_SET)
|
98
|
+
r = @fp.read(size)
|
99
|
+
@cur += r.size
|
100
|
+
return r
|
101
|
+
end
|
102
|
+
|
103
|
+
def eof?; @cur == @size; end
|
104
|
+
def rewind; @cur = 0; end
|
105
|
+
end
|
106
|
+
|
107
|
+
def initialize(file)
|
108
|
+
@fp = File.open(file)
|
109
|
+
magic = @fp.gets
|
110
|
+
unless magic == ARMAG
|
111
|
+
raise ArError, "archive broken: #{file}"
|
112
|
+
end
|
113
|
+
@ofs = []
|
114
|
+
end
|
115
|
+
|
116
|
+
def close
|
117
|
+
@fp.close
|
118
|
+
end
|
119
|
+
|
120
|
+
def list
|
121
|
+
@fp.seek(SARMAG, IO::SEEK_SET)
|
122
|
+
while ! @fp.eof?
|
123
|
+
hdr = @fp.read(AR_HDR_SIZE)
|
124
|
+
name,date,uid,gid,mode,size,fmag = hdr.unpack('a16a12a6a6a8a10a2')
|
125
|
+
unless fmag == ARFMAG
|
126
|
+
raise ArError, "invalid archive field magic #{fmag} @ #{@fp.pos} [#{hdr}]"
|
127
|
+
end
|
128
|
+
name.strip!
|
129
|
+
size = size.to_i
|
130
|
+
@ofs.push(ArFile.new(@fp,
|
131
|
+
name,Time.at(date.to_i), uid.to_i, gid.to_i,
|
132
|
+
mode.oct, size, @fp.pos))
|
133
|
+
# puts "hdr=[#{hdr}] pos=#{@fp.pos}, size=#{size} #{(size + 1)&~1}"
|
134
|
+
@fp.seek((size + 1)&~1, IO::SEEK_CUR)
|
135
|
+
end
|
136
|
+
@ofs
|
137
|
+
end
|
138
|
+
def each_file
|
139
|
+
if @ofs.empty?; list; end
|
140
|
+
@ofs.each {|file|
|
141
|
+
yield file.name, file
|
142
|
+
}
|
143
|
+
end
|
144
|
+
|
145
|
+
def open(name)
|
146
|
+
if @ofs.empty?; list; end
|
147
|
+
@ofs.each {|file|
|
148
|
+
if file.name == name
|
149
|
+
if block_given?
|
150
|
+
return yield(file)
|
151
|
+
else
|
152
|
+
return file
|
153
|
+
end
|
154
|
+
end
|
155
|
+
}
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
data/lib/debian/utils.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
#
|
2
|
+
# utils.rb - ruby utilities interface for debian.rb (gunzip, tar, ..)
|
3
|
+
# Copyright (c) 2001 Fumitoshi UKAI <ukai@debian.or.jp>
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 2 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
#
|
19
|
+
# $Id: utils.rb,v 1.2 2003/10/07 17:07:02 ukai Exp $
|
20
|
+
#
|
21
|
+
|
22
|
+
module Debian
|
23
|
+
module Utils
|
24
|
+
GUNZIP = '/bin/gunzip'
|
25
|
+
TAR = '/bin/tar'
|
26
|
+
TAR_EXTRACT = '-x'
|
27
|
+
TAR_LIST = '-t'
|
28
|
+
|
29
|
+
def Utils.pipeline(io,progs,stderr = false)
|
30
|
+
Signal.trap('CHLD', 'IGNORE')
|
31
|
+
# wr0 -> rd0 [gunzip] wr -> rd
|
32
|
+
rd,wr = IO.pipe
|
33
|
+
rde,wre = IO.pipe
|
34
|
+
pid = fork
|
35
|
+
if pid
|
36
|
+
# parent
|
37
|
+
wr.close
|
38
|
+
wre.close
|
39
|
+
if block_given?
|
40
|
+
return yield(rd, rde)
|
41
|
+
else
|
42
|
+
return rd, rde
|
43
|
+
end
|
44
|
+
else
|
45
|
+
# child
|
46
|
+
rd.close
|
47
|
+
rd0, wr0 = IO.pipe
|
48
|
+
pid2 = fork
|
49
|
+
if pid2
|
50
|
+
# gunzip
|
51
|
+
wr0.close
|
52
|
+
STDOUT.reopen(wr)
|
53
|
+
STDERR.reopen(wre) if stderr
|
54
|
+
STDIN.reopen(rd0)
|
55
|
+
ENV["LANG"] = "C"
|
56
|
+
ENV["LC_ALL"] = "C"
|
57
|
+
exec(*progs)
|
58
|
+
# XXX: waitpid(pid2?)
|
59
|
+
else
|
60
|
+
rd0.close
|
61
|
+
while ! io.eof?
|
62
|
+
wr0.write(io.read(4096))
|
63
|
+
end
|
64
|
+
exit 0
|
65
|
+
end
|
66
|
+
end
|
67
|
+
Process.waitpid(pid, 0)
|
68
|
+
Process.wait
|
69
|
+
end
|
70
|
+
|
71
|
+
def gunzip(io)
|
72
|
+
Utils.pipeline(io, [GUNZIP]) {|fp,fpe|
|
73
|
+
fpe.close
|
74
|
+
if block_given?
|
75
|
+
return yield(fp)
|
76
|
+
else
|
77
|
+
return fp
|
78
|
+
end
|
79
|
+
}
|
80
|
+
end
|
81
|
+
def tar(io,op,*pat)
|
82
|
+
progs = [TAR, op, '--wildcards', '-f', '-']
|
83
|
+
if pat[0]
|
84
|
+
progs += ['--to-stdout', *pat]
|
85
|
+
end
|
86
|
+
Utils.pipeline(io,progs,op == "-t") {|fp,fpe|
|
87
|
+
if op == "-t"
|
88
|
+
pid = fork
|
89
|
+
if pid
|
90
|
+
# parent
|
91
|
+
else
|
92
|
+
while !fpe.eof? && str = fpe.readline
|
93
|
+
unless str.match(/^\/bin\/tar: Record size = [0-9]+ blocks$/)
|
94
|
+
STDERR.puts str
|
95
|
+
end
|
96
|
+
end
|
97
|
+
exit
|
98
|
+
end
|
99
|
+
end
|
100
|
+
fpe.close
|
101
|
+
if block_given?
|
102
|
+
return yield(fp)
|
103
|
+
else
|
104
|
+
return fp
|
105
|
+
end
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
module_function :gunzip, :tar
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
.TH DPKG-CHECKDEPS.RB 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
|
2
|
+
.SH NAME
|
3
|
+
dpkg-checkdeps.rb \- Utility to check deb dependency
|
4
|
+
.SH SYNOPSIS
|
5
|
+
\fBdpkg-checkdeps.rb\fP [\fIopts\fP] \fIdebfile\fP ...
|
6
|
+
.br
|
7
|
+
\fBdpkg-checkdeps.rb\fP [\fIopts\fP] \fB\-\-from\fP \fIpackages\fP \fIpkgname\fP...
|
8
|
+
.br
|
9
|
+
\fBdpkg-checkdeps.rb\fP [\fIopts\fP] \fB\-\-from\fP \fB\-\-all\fP
|
10
|
+
.br
|
11
|
+
\fBdpkg-checkdeps.rb\fP [\fIopts\fP] \fB\-\-check\fP \fIpkgname\fP...
|
12
|
+
.br
|
13
|
+
\fIopts\fP: \fB\-\-to\fP \fIpackages\fP
|
14
|
+
\fB\-\-arch\fP \fIarch\fP
|
15
|
+
\fB\-\-verbose\fP
|
16
|
+
\fB\-q\fP
|
17
|
+
.br
|
18
|
+
.SH DESCRIPTION
|
19
|
+
.I dpkg-checkdeps.rb
|
20
|
+
checks deb dependency problems when specified deb packages are
|
21
|
+
installed in the target packages list.
|
22
|
+
.SH OPTIONS
|
23
|
+
.TP
|
24
|
+
.PD 0
|
25
|
+
.BI \-t " packages-file"
|
26
|
+
.TP
|
27
|
+
.BI \-\-to " packages-file"
|
28
|
+
.PD
|
29
|
+
Specify target \fIpackages-file\fP. If this option is used multiple times,
|
30
|
+
packages lists are appended. If no \fB-t\fP option specified,
|
31
|
+
default is current installed packages list, that is, /var/lib/dpkg/status.
|
32
|
+
.TP
|
33
|
+
.PD 0
|
34
|
+
.BI \-f " packages-file"
|
35
|
+
.TP
|
36
|
+
.BI \-\-from " packages-file"
|
37
|
+
.PD
|
38
|
+
Specify source \fIpackages-file\fP. If this option is used multiple times,
|
39
|
+
packages lists are appended. If you use this option, you can select packages
|
40
|
+
by \fIpackage-name\fP, or all of them by \fB\-\-all\fP option.
|
41
|
+
.TP
|
42
|
+
.PD 0
|
43
|
+
.B \-A
|
44
|
+
.TP
|
45
|
+
.B \-\-all
|
46
|
+
.PD
|
47
|
+
Select all packages in source \fIpackages-file\fP. You must use this option
|
48
|
+
with \fB\-\-from\fP option.
|
49
|
+
.TP
|
50
|
+
.PD 0
|
51
|
+
.BI \-a " arch"
|
52
|
+
.TP
|
53
|
+
.BI \-\-arch " arch"
|
54
|
+
.PD
|
55
|
+
Specify acceptable \fIarch\fP in \fIpackages-file\fP. Default is
|
56
|
+
installation_architecture of dpkg.
|
57
|
+
.TP
|
58
|
+
.PD 0
|
59
|
+
.B \-c
|
60
|
+
.TP
|
61
|
+
.B \-\-check
|
62
|
+
.PD
|
63
|
+
Check selected packages are satisfied by all packages in target
|
64
|
+
\fIpackages\fP.
|
65
|
+
.TP
|
66
|
+
.PD 0
|
67
|
+
.B \-v
|
68
|
+
.TP
|
69
|
+
.B \-\-verbose
|
70
|
+
.PD
|
71
|
+
Verbose mode
|
72
|
+
.TP
|
73
|
+
.PD 0
|
74
|
+
.BI \-h
|
75
|
+
.TP
|
76
|
+
.BI \-\-help
|
77
|
+
.PD
|
78
|
+
Display some help.
|
79
|
+
.SH EXAMPLES
|
80
|
+
|
81
|
+
% dpkg-checkdeps.rb \-\-arch alpha \
|
82
|
+
\-\-to '*/binary-$ARCH/Packages' \
|
83
|
+
\-\-from ../proposed-updates/Packages' \-\-all
|
84
|
+
|
85
|
+
% dpkg-checkdeps.rb \-\-to '*/binary-$ARCH/Packages' \-\-check libc6
|
86
|
+
|
87
|
+
.SH BUGS
|
88
|
+
|
89
|
+
There are probably tons of bugs in this program.
|
90
|
+
|
91
|
+
This checks only depends, recommends and suggests, doesn't check
|
92
|
+
pre-depends and conflicts, yet.
|
93
|
+
|
94
|
+
This program comes with no warranties. If running this program
|
95
|
+
causes fire and brimstone to rain down upon the earth, you will be
|
96
|
+
on our own.
|
97
|
+
|
98
|
+
.SH AUTHOR
|
99
|
+
Fumitoshi UKAI <ukai@debian.or.jp>.
|
100
|
+
|
101
|
+
|
102
|
+
|
data/man/dpkg-ruby.1
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
.TH DPKG-RUBY 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
|
2
|
+
.SH NAME
|
3
|
+
dpkg-ruby \- Utility to read a dpkg style db file, dpkg-awk clone
|
4
|
+
.SH SYNOPSIS
|
5
|
+
\fBdpkg-ruby\fP [\fB(\-f|\-\-file) \fIfilename\fP] [\fB(\-d|\-\-debug) \fI##\fP] [\fB(\-s|\-\-sort) \fIlist\fP] [\fB(\-n|\-\-numeric) \fIlist\fP] [\fB(\-rs|\-\-rec_sep) \fI??\fP] '\fI<fieldname>:<regex>\fP' ... \-\- \fI<out_fieldname>\fP ..
|
6
|
+
.br
|
7
|
+
.SH DESCRIPTION
|
8
|
+
.I dpkg-ruby
|
9
|
+
Parses a dpkg status file(or other similarly formated file) and
|
10
|
+
outputs the resulting records. It can use regex on the field
|
11
|
+
values to limit the returned records, and it can also be told
|
12
|
+
which fields to output. As another option, it can sort the
|
13
|
+
matched fields.
|
14
|
+
.SH OPTIONS
|
15
|
+
|
16
|
+
.TP
|
17
|
+
.PD 0
|
18
|
+
.BI \-f " filename"
|
19
|
+
.TP
|
20
|
+
.BI \-\-file " filename"
|
21
|
+
.PD
|
22
|
+
The file to parse. The default is /var/lib/dpkg/status.
|
23
|
+
.TP
|
24
|
+
.PD 0
|
25
|
+
.BI \-d " [#]"
|
26
|
+
.TP
|
27
|
+
.BI \-\-debug " [#]"
|
28
|
+
.PD
|
29
|
+
Each time this is specified, it increased the debug level.
|
30
|
+
.TP
|
31
|
+
.PD 0
|
32
|
+
.BI \-s " field(s)"
|
33
|
+
.TP
|
34
|
+
.BI \-\-sort " field(s)"
|
35
|
+
.PD
|
36
|
+
A space or comma separated list of fields to sort on.
|
37
|
+
.TP
|
38
|
+
.PD 0
|
39
|
+
.BI \-n " field(s)"
|
40
|
+
.TP
|
41
|
+
.BI \-\-numeric " field(s)"
|
42
|
+
.PD
|
43
|
+
A space or comma separated list of fields that should be
|
44
|
+
interpreted as numeric in value.
|
45
|
+
.TP
|
46
|
+
.PD 0
|
47
|
+
.BI \-rs " ??"
|
48
|
+
.TP
|
49
|
+
.BI \-\-rec_sep " ??"
|
50
|
+
.PD
|
51
|
+
Output this string at the end of each output paragraph.
|
52
|
+
.\" .TP
|
53
|
+
.\" .PD 0
|
54
|
+
.\" .I -of ??
|
55
|
+
.\" .TP
|
56
|
+
.\" .I --outform ??
|
57
|
+
.\" .PD
|
58
|
+
.\" Specify the outform that dpkg-ruby should use. Current
|
59
|
+
.\" formats are normal(the old, tried and true style), and
|
60
|
+
.\" xml.
|
61
|
+
.TP
|
62
|
+
.PD 0
|
63
|
+
.B \-h
|
64
|
+
.TP
|
65
|
+
.B \-\-help
|
66
|
+
.PD
|
67
|
+
Display some help.
|
68
|
+
.TP
|
69
|
+
.I fieldname
|
70
|
+
The fields from the file, that are matched with the regex given.
|
71
|
+
The \fIfieldname\fPs are case insensitive.
|
72
|
+
.TP
|
73
|
+
.I out_fieldname
|
74
|
+
The fields from the file, that are outputted for each record.
|
75
|
+
If the first field listed is begins with
|
76
|
+
.IR ^ ,
|
77
|
+
then the list that follows are fields
|
78
|
+
.I NOT
|
79
|
+
to be outputted.
|
80
|
+
.SH BUGS
|
81
|
+
|
82
|
+
Be warned that the author has only a shallow understanding of the
|
83
|
+
dpkg packaging system, so there are probably tons of bugs in this
|
84
|
+
program.
|
85
|
+
|
86
|
+
This program comes with no warranties. If running this program
|
87
|
+
causes fire and brimstone to rain down upon the earth, you will be
|
88
|
+
on our own.
|
89
|
+
|
90
|
+
This program accesses the dpkg database directly in places, querying
|
91
|
+
for data that cannot be gotten via dpkg.
|
92
|
+
|
93
|
+
.SH AUTHOR
|
94
|
+
Fumitoshi UKAI <ukai@debian.or.jp>.
|
95
|
+
This manual page are based on (or almost copy from :) dpkg-awk(1) manual
|
96
|
+
written by Adam Heath <doogie@debian.org>
|
97
|
+
|
98
|
+
|
99
|
+
|