# Presentation memo ## NOTE This slide is published at Rabbit Slide Show ## ClearCode Inc. * My collegue gave me a feedback for this talk ## Not talk about In this session, I won't talk about bugs.debian.org internal in details. # Agenda * Why so curious about bugs.d.o? * The troublesome case about bugs.d.o * What is Fabre and why is it needed? * Demonstrate a front-end * Conclusion # As a Maintainer * Maintain some packages * * groonga (Upstream releases monthly updates) * fcitx-imlist * libhinawa * ... # We use bugs.d.o ![](images/bugs-d-o.png){:relative-height="100"} # bugs.debian.org * Communicate each other by E-mail * Change the bug status by sending E-mail * Sending E-mail to control@bugs.d.o * Use control command in E-mail reply # Why so curious about bugs.d.o? * I've received deprecated notification bugs * Bug# 956770 growl-for-linux: Depends on deprecated libappindicator * Bug# 955899 growl-for-linux: Depends on deprecated dbus-glib # How did you fixed? * Bug# 956770 growl-for-linux: Depends on deprecated libappindicator * * Migrated to libayatana-indicator * It is easy because there are enough compatibility * Fixed pkg-config target and include path # How did you fixed? (again) * Bug# 955899 growl-for-linux: Depends on deprecated dbus-glib * * Migrated to GDBus * Use d-feet to detect interface change (Rhythmbox plugin) * Fixed a interface to follow GDBus API * Send PR to upstream * Fixed a potential Rhythmbox related bug, too # growl-for-linux was fixed * But...What about other packages? 🤔 # What about other packages? * libappindicator: deprecated in Debian; AppIndicator based applications, please switch to Ayatana (App)Indicator(s) * * libdbus-glib-1-dev: is deprecated * # libappindicator: deprecated in Debian; ![](images/libappindicator-blocked-by.png){:relative-height="80"} * Many blocked bugs # libdbus-glib-1-dev: is deprecated ![](images/libdbus-glib-blocked-by.png){:relative-height="80"} * *Too many* blocked bugs (Need to scroll) # Can you track blocked bugs? ![](images/libdbus-glib-blocked-by.png){:relative-height="80"} * Feel dizzy 😵 # How to track many blocked? * Use UserTags? * * # Does it work with libappindicator? ![](images/user-tag-ayatana-appindicator.png){:relative-height="80"} * UserTag is: *ayatana-appindicator* # Does it work with libdbus-glib1-dev? * It is a case that UserTag is *not available* * It should be tagged... # The troublesome case about bugs.d.o * UserTag is not always used * Many blocked bugs may be difficult to see * *How to solve this situation?* # Use udd.debian.org! ![](images/udd-blocking-and-usertag.png){:relative-width="80"} * Can track usertags * Can track blocking bugs # In my experience, I need * Easy to: * Track a specified bug (tagged/not tagged) * Find a bug that no one working on * Send control/submitter E-mail * Find affected bugs # What I need for? * Easy to: * ~~Track a specified bug (tagged/not tagged)~~ *Use UDD!* * Find a bug that no one working on 🤔 * Send control/submitter E-mail 🤔 * Find affected bugs 🤔 # Starting personal project * Concept * Make unstable life comfortable * Find a bug that no one working on * Easy to send control E-mail * Easy to find blocking bugs * Easy to find affected bugs # Starting personal project * Concept * Make unstable life comfortable * Find a bug that no one working on *Count comment in bug#NNNNNN* * Easy to send control E-mail *Add mailto: link explicitly* * Easy to find blocking bugs *List blocking bugs* * Easy to find affected bugs *Alert affected bugs* # What should I do? * Name the project 😀 * Integrate with salsa.d.o account (optional) * Sync bug information * Import additional metadata * Make it accessible! # What should I do? * *Name the project 😀* {::note}Naming is important!{:/note} * Integrate with salsa.d.o account (optional) * Sync bug information * Import additional metadata * Make it accessible! # Named as Fabre ![](images/345px-Jean-henri_fabre.jpg){:relative-height="80"} cite: # Why Fabre? * Reuse previous (maybe) similar project * * Around 2005, fulltext search service had been hosted * Undocumented Debian "debbugs internal" {::note}written in Japanese{:/note} * # What should I do? * Name the project 😀 {::note}Naming is important!{:/note} * *Integrate with salsa.d.o account (optional)* * Sync bug information * Import additional metadata * Make it accessible! # Integrate with salsa.d.o account (optional) * Use GitLab(salsa.d.o) as an OAuth2 provider * * No need to store sensitive password # What should I do? * Name the project 😀 {::note}Naming is important!{:/note} * Integrate with salsa.d.o account (optional) * *Sync bug information* * Import additional metadata * Make it accessible! # Sync bug information * Get E-mail archive with rsync * * rsync -av rsync://bugs-mirror.debian.org/bts-spool-db/ {::note}It requires 15GiB!{:/note} * Use *.log and *.summary # Extract .log and .summary * Use perl module which is used for bugs.d.o (Debbugs) * Debbugs::Log, Debbugs::Status, Debbugs::MIME and so on * *.log contains multiple raw E-mail content with control sequence * *.summary contains metadata of each bug # How to parse .log my $log = Debbugs::Log->new(log_name => $path); my @records = $log->read_all_records(); for my $record (@records) { ... my $entity = Debbugs::MIME::parse_to_mime_entity($record); print "From: " . $entity->head->get("From"); print "To: " . $entity->head->get("To"); print "Subject: " . get_field($entity, "Subject"); print "Date: " . $entity->head->get("Date"); } {: lang="perl"} # How to parse .summary Format-Version: 3 Submitter: Nis Martensen Subject: libexo-helpers: starting thunderbird fails for some mailto URIs Found-In: exo/0.12.4-1 Tags: patch Package: libexo-helpers Message-Id: <159439678897.3833.10774950364480956704.reportbug@siamos.nes.net> Severity: normal Date: 1594396982 my $summary = Debbugs::Status::read_bug(summary => $path); print $summary->{"tags"} {: lang="perl"} # What should I do? * Name the project 😀 {::note}Naming is important!{:/note} * Integrate with salsa.d.o account (optional) * Sync bug information * *Import additional metadata* * Make it accessible! # Import additional metadata * UDD: UltimateDebianDatabase * * You can access with: psql --host=udd-mirror.debian.net --user=udd-mirror udd --password * Schema is available: * Import popcon and package data # What should I do? * Name the project 😀 {::note}Naming is important!{:/note} * Integrate with salsa.d.o account (optional) * Sync bug information * Import additional metadata from UDD * *Make it accessible!* # Prepared server specs for experiment * Start with small VPS instance (about 3.26 USD/mo) * 1vCPU * 1GiB memory * 20GiB disk space * Max 100Mbps bandwidth # Fabre internals ![](images/fabre-internals.png){:relative-height="100"} # What is the trigger of syncing * Subscribe debian-bugs-dist@lists.debian.org * Poll subscribed E-mail account * Fetch latest E-mail archives on bugs-mirror.debian.org * Convert & import E-mail archive data # Concept of Fabre * Easy to find a bug that no one working on * Count comment in bug#NNNNNN * Easy to send control E-mail * Add mailto: link explicitly * Easy to view blocking bugs * List blocking appropriately # Easy to find a bug that no one working on ![](images/easy-to-find-no-one-working.png){:relative-height="80"} * Show each number of comments (yellow background color means no one working on yet) # Easy to send control E-mail ![](images/easy-to-send-control-email.png){:relative-height="80"} * Show each mailto: button to control # Easy to view blocking bugs ![](images/easy-to-view-blocking.png){:relative-height="80"} * List blocking appropriately # What comes to next? * It looks useful, isn't it? # Personalize Fabre! * Add bookmark * Show affected bugs * Followup newer comments # Personalize Fabre! * Add bookmark * *Link account and bug* * Show affected bugs * *Link account and installed packages list* * Followup newer comments * *Link account and search comment information* # How to collect installed packages list? POPULARITY-CONTEST-0 TIME:1596711793 ID:XXX ARCH:amd64 POPCONVER:1.70 VENDOR:Debian 1596672000 1570622400 libgail-common /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libgail.so 1596672000 1596585600 libavcodec58 /usr/lib/x86_64-linux-gnu/libavcodec.so.58.91.100 1596672000 1586736000 libgoa-1.0-0b /usr/lib/x86_64-linux-gnu/libgoa-1.0.so.0.0.0 ... 1596672000 1586217600 libzvbi0 /usr/lib/x86_64-linux-gnu/libzvbi.so.0.13.2 1596672000 1590624000 udisks2 /usr/share/locale/ja/LC_MESSAGES/udisks2.mo END-POPULARITY-CONTEST-0 TIME:1596711817 * Just upload popcon file * /usr/sbin/popularity-contest --su-nobody # Personalized Fabre on dashboard ![](images/fabre-dashboards.png){:relative-height="100"} # How Fabre is good enough to work? * Now ready to DEMO if there is a time to do # Conclusion * In my experiment, mashup some data sources may improve UX * bug report * UDD metadata * installed packages list * There are plenty room of improvements to develop # Any questions? Could you speak slowly if you ask, please?