Skip to content

Instantly share code, notes, and snippets.

@rollcat
Last active October 5, 2017 20:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rollcat/382ce16287daa03aec632aabacacd55e to your computer and use it in GitHub Desktop.
Save rollcat/382ce16287daa03aec632aabacacd55e to your computer and use it in GitHub Desktop.
Executable basename conflicts in Debian packages
#!/usr/bin/env python3
import subprocess
import os
PATH = [
"/bin",
"/sbin",
"/usr/bin",
"/usr/sbin",
"/usr/games",
]
def group_by(f, xs, collection=list, add=list.append):
tmp = {}
for x in xs:
add(tmp.setdefault(f(x), collection()), x)
return tmp
def get_bins():
lines = []
lines.extend(subprocess.getoutput("apt-file find '/usr/games/'")
.split("\n"))
lines.extend(subprocess.getoutput("apt-file find 'bin/'").split("\n"))
for line in lines:
pkg, fname = line.strip().split(": ", 1)
if os.path.dirname(fname) not in PATH:
continue
yield pkg, fname
return
def main():
all_bins = get_bins()
by_basename = group_by(lambda pf: os.path.basename(pf[1]), all_bins)
for basename, bins in by_basename.items():
if len(bins) <= 1:
continue
if len({os.path.dirname(fname) for pkg, fname in bins}) <= 1:
continue
if len({pkg for pkg, fname in bins}) <= 1:
continue
for pkg, fname in bins:
print("{}:\t{}\t{}".format(basename, pkg, fname))
return
if __name__ == "__main__":
main()
arcstat: nordugrid-arc-client /usr/bin/arcstat
arcstat: zfsutils-linux /usr/sbin/arcstat
arping: arping /usr/sbin/arping
arping: iputils-arping /usr/bin/arping
bat: bacula-console-qt /usr/bin/bat
bat: bacula-console-qt /usr/sbin/bat
bat: bareos-bat /usr/bin/bat
bconsole: bacula-console /usr/sbin/bconsole
bconsole: bareos-bconsole /usr/bin/bconsole
bconsole: bareos-bconsole /usr/sbin/bconsole
bcopy: bacula-sd /usr/bin/bcopy
bcopy: bareos-tools /usr/sbin/bcopy
bregex: bacula-director /usr/sbin/bregex
bregex: bareos-tools /usr/bin/bregex
bregex: bareos-tools /usr/sbin/bregex
bscan: bacula-bscan /usr/bin/bscan
bscan: bareos-database-tools /usr/sbin/bscan
bsmtp: bacula-common /usr/sbin/bsmtp
bsmtp: bareos-common /usr/bin/bsmtp
bsmtp: bareos-common /usr/sbin/bsmtp
bwild: bacula-director /usr/sbin/bwild
bwild: bareos-tools /usr/bin/bwild
bwild: bareos-tools /usr/sbin/bwild
crm: crm114 /usr/bin/crm
crm: crmsh /usr/sbin/crm
dbverify: 389-ds-base /usr/sbin/dbverify
dbverify: lifelines /usr/bin/dbverify
faxq: hylafax-server /usr/sbin/faxq
faxq: mgetty-fax /usr/bin/faxq
gearmand: gearman-job-server /usr/sbin/gearmand
gearmand: gearman-server /usr/bin/gearmand
hcc: lam4-dev /usr/bin/hcc
hcc: uhexen2 /usr/games/hcc
hunt: bsdgames /usr/games/hunt
hunt: hunt /usr/sbin/hunt
icmd: ipmiutil /usr/sbin/icmd
icmd: renameutils /usr/bin/icmd
mailq: courier-mta /usr/bin/mailq
mailq: dma /usr/bin/mailq
mailq: esmtp-run /usr/bin/mailq
mailq: exim4-daemon-heavy /usr/bin/mailq
mailq: exim4-daemon-light /usr/bin/mailq
mailq: nullmailer /usr/bin/mailq
mailq: postfix /usr/bin/mailq
mailq: qmail-run /usr/sbin/mailq
mailq: sendmail-bin /usr/bin/mailq
mailq: ssmtp /usr/sbin/mailq
metar: flightgear /usr/games/metar
metar: metar /usr/bin/metar
monitor: 389-ds-base /usr/sbin/monitor
monitor: dmucs /usr/bin/monitor
monop: bsdgames /usr/games/monop
monop: mono-devel /usr/bin/monop
morse: bsdgames /usr/games/morse
morse: morse /usr/bin/morse
morse: morse-simulator /usr/bin/morse
mousetrap: gnome-mousetrap /usr/bin/mousetrap
mousetrap: mousetrap /usr/games/mousetrap
newaliases: courier-mta /usr/sbin/newaliases
newaliases: dma /usr/bin/newaliases
newaliases: esmtp-run /usr/bin/newaliases
newaliases: exim4-daemon-heavy /usr/bin/newaliases
newaliases: exim4-daemon-light /usr/bin/newaliases
newaliases: msmtp-mta /usr/bin/newaliases
newaliases: nullmailer /usr/bin/newaliases
newaliases: opensmtpd /usr/sbin/newaliases
newaliases: postfix /usr/bin/newaliases
newaliases: qmail-run /usr/sbin/newaliases
newaliases: sendmail-bin /usr/sbin/newaliases
newaliases: ssmtp /usr/sbin/newaliases
pm-hibernate: molly-guard /sbin/pm-hibernate
pm-hibernate: pm-utils /usr/sbin/pm-hibernate
pm-suspend-hybrid: molly-guard /sbin/pm-suspend-hybrid
pm-suspend-hybrid: pm-utils /usr/sbin/pm-suspend-hybrid
pm-suspend: molly-guard /sbin/pm-suspend
pm-suspend: pm-utils /usr/sbin/pm-suspend
primes: bsdgames /usr/games/primes
primes: libmath-prime-util-perl /usr/bin/primes
queen: flight-of-the-amazon-queen /usr/games/queen
queen: sgb /usr/bin/queen
ricochet: ricochet /usr/games/ricochet
ricochet: ricochet-im /usr/bin/ricochet
rm: coreutils /bin/rm
rm: safe-rm /usr/bin/rm
rmail: courier-mta /usr/sbin/rmail
rmail: exim4-daemon-heavy /usr/sbin/rmail
rmail: exim4-daemon-light /usr/sbin/rmail
rmail: postfix /usr/bin/rmail
rmail: postfix /usr/sbin/rmail
rmail: rmail /usr/sbin/rmail
rs: reminiscence /usr/games/rs
rs: rs /usr/bin/rs
sauce: fortunes-de /usr/games/sauce
sauce: sauce /usr/sbin/sauce
scramble: filters /usr/games/scramble
scramble: staden-io-lib-utils /usr/bin/scramble
sendfax: hylafax-client /usr/bin/sendfax
sendfax: mgetty-fax /usr/sbin/sendfax
sendpage: hylafax-client /usr/bin/sendpage
sendpage: sendpage-server /usr/sbin/sendpage
sethdlc: ax25-tools /usr/bin/sethdlc
sethdlc: dahdi /usr/sbin/sethdlc
siggen: siggen /usr/bin/siggen
siggen: tripwire /usr/sbin/siggen
singularity: singularity /usr/games/singularity
singularity: singularity-container /usr/bin/singularity
splat: spl /usr/sbin/splat
splat: splat /usr/bin/splat
spring: ruby-spring /usr/bin/spring
spring: spring /usr/games/spring
sslh: libnet-proxy-perl /usr/bin/sslh
sslh: sslh /usr/sbin/sslh
syslogd: busybox-syslogd /sbin/syslogd
syslogd: inetutils-syslogd /usr/sbin/syslogd
tcpd: tcm /usr/bin/tcpd
tcpd: tcpd /usr/sbin/tcpd
turnserver: coturn /usr/bin/turnserver
turnserver: turnserver /usr/sbin/turnserver
update-locale: gosa-dev /usr/bin/update-locale
update-locale: locales /usr/sbin/update-locale
update-service: daemontools-run /usr/sbin/update-service
update-service: runit /sbin/update-service
vuname: umview /usr/bin/vuname
vuname: util-vserver /usr/sbin/vuname
ztest: zfsutils-linux /sbin/ztest
ztest: zutils /bin/ztest
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment