Command Line Bug Hunting in FreeBSD
FreeBSD uses bugzilla for tracking bugs, taking feature requests, regressions and issues in the Operating System. The web interface for bugzilla is okay, but if you want to do a lot of batch operations it is slow to deal with. We are planning to run a bugsquash in July and that really needs some tooling to help any hackers that show up process the giant bug list we have.
Thankfully there is a
python3 command line tool for interacting with bugzilla,
called pybugz
.
bugz
allows you to search through, up date and modify
bugs without having to use a web browser. Getting
bugz
going was not very
intuitive and it took me a bit of faffing.
bugz
ships with a configuration for connecting to the FreeBSD bugzilla you
use it by selecting it as a
connection
. The supported connections are dumped
out if you try and do an operation with the
-d 3
debug flag. This flag is
really helpful for figuring out how to use
bugz
because while it documents
itself, it holds on to the documentation like a powerful secret.
bugz
really wants you to authenticate before you do anything, it won't show
you help for commands without auth. There is however a
--skip-auth
flag. With
this you can search for bugs, lets look for ipv6 issues with a patch in the
base system:
$ bugz --connection FreeBSD --skip-auth search --product "Base System" "patch ipv6"
* Info: Using [FreeBSD] (https://bugs.freebsd.org/bugzilla/xmlrpc.cgi)
* Info: Searching for bugs meeting the following criteria:
* Info: product = ['Base System']
* Info: status = ['New', 'Open', 'In Progress', 'UNCONFIRMED']
* Info: summary = ['patch ipv6']
88821 bugs [patch] IPv6 support for ggated(8)
186133 bugs [patch] tcpdump(1): zero checksums are invalid for UDP over IPv6
174225 bugs [network.subr] [patch] add support for ipv6_addrs_IF style aliases to rc.conf(5)
178881 bdrewery [patch] getifaddrs(3) does not report IPv6 addresses properly in 32-bit compatibility mode
180572 rc [network.subr] [patch] SLAAC is enabled for ipv6_cpe_wanif
133227 bugs [patch] whois(1): add support for SLD whois server lookups and IPv6 address lookups
104851 bugs [inet6] [patch] On link routes not configured when using both IPv6 autoconfiguration and manual configuration
147681 bugs [network.subr][patch] Add inet6 keyword if it wasn't specified in ifconfig_IF_ipv6
130657 bugs [ip6] [patch] ipv6 class option
165190 bugs [ipfw] [lo] [patch] loopback interface is not marking ipv6 packets
245103 bz [patch] [ipv6] IPv6: update v6 temporary address lifetime according to rfc4941bis
* Info: 11 bug(s) found.
We can also filter our search by component:
$ bugz --connection FreeBSD --skip-auth search --product "Base System" --component bhyve
bugz
supports modifying and updating bugz from the command line, this is the
main focus of the
README on github
. To authenticate
bugz
takes a
username and password on the command line, I am not suggesting you fill your
history with your bugzilla password, I did something like:
$ bugz --connection FreeBSD -u thj@freebsd.org --password `pass show FreeBSD/bugz | head -n 1` search udp
There is a
-k
flag that takes a key file, but I didn't want to dig into the
source of
bugz
to figure out what this actually is.
Our bug squash is probably going to focus on clearing bugs with patches and the
readme has a workflow for finding bugs and grabbing any diffs. More tools can
and should be written around
bugz
this is just a start. Just playing with
this I have spotted bugs than can easily be closed from the tracker.
Finally, you are going to need the help while using
bugz
, it took me longer
than I liked to figure out that each sub command documents its own help and
they all take the
-h
after the command. You need auth (or to skip auth)
before you can use this flag.
$ bugz --connection FreeBSD --skip-auth search -h