2 years agoTry to wake up gpg-agent before use to avoid failures master
David McBride [Thu, 13 Sep 2018 14:05:37 +0000 (15:05 +0100)]
Try to wake up gpg-agent before use to avoid failures

With the upgrade to gpg2, which mandates the use of gpg-agent for various
operations, we have seen some sporadic failures where the gpg client is
unable to immediately contact a gpg-agent, and fails to complete the operation
it is asked to perform.

Exactly why this fails is not currently known.

In an effort to try to avoid this, add a `gpg-connecti-agent /bye || true`
invocation before the first use of GPG in our scripts to try to mitigate the

2 years agoDo not run check_apt_repo with taint mode.
David McBride [Tue, 29 May 2018 10:58:32 +0000 (11:58 +0100)]
Do not run check_apt_repo with taint mode.

This is an undesirable downgrade of functionality.  However, as of
Ubuntu 18.04, it appears that running this script with taint mode
enabled is not viable, as Dpkg::Vendor cannot apparently be run
any longer with it set:

Insecure dependency in eval while running with -T switch at /usr/share/perl5/Dpkg/ line 164.
Compilation failed in require at /usr/share/perl5/Dpkg/Control/ line 25.
BEGIN failed--compilation aborted at /usr/share/perl5/Dpkg/Control/ line 25.
Compilation failed in require at /usr/share/perl5/Dpkg/ line 47.
BEGIN failed--compilation aborted at /usr/share/perl5/Dpkg/ line 47.
Compilation failed in require at /usr/share/perl5/Dpkg/ line 26.
BEGIN failed--compilation aborted at /usr/share/perl5/Dpkg/ line 26.
Compilation failed in require at line 62.
BEGIN failed--compilation aborted at line 62.

This will hopefully be a short-term measure.

3 years agoFix pkglist check script to not deadlock when calling GPG.
David McBride [Thu, 29 Sep 2016 17:53:13 +0000 (18:53 +0100)]
Fix pkglist check script to not deadlock when calling GPG.

The previous code used IPC::Open3 in a completely inappropriate way
that could (and did) easily deadlock.

Replace with a simpler construction that avoids this problem by
storing unwrapped output as a temporary file.

3 years agoUpdate path and GPG key ID for new production MCS Linux build.
David McBride [Thu, 29 Sep 2016 17:52:23 +0000 (18:52 +0100)]
Update path and GPG key ID for new production MCS Linux build.

4 years agocheck_git_fsck: Do not consider dangling commits to be problematic.
David McBride [Fri, 5 Aug 2016 12:19:38 +0000 (13:19 +0100)]
check_git_fsck: Do not consider dangling commits to be problematic.

4 years agocheck_mcslinux_pkglist: Fix handling of failed package-list fetch.
David McBride [Wed, 27 Jul 2016 10:43:47 +0000 (11:43 +0100)]
check_mcslinux_pkglist: Fix handling of failed package-list fetch.

We were previously using 'warn' unnecessarily; drop this, as it
clutters the output of the command.

We also failed to properly handle the case that fetching the package list
failed; rather than trying to validate the contents of a file we couldn't
fetch, we should instead immediately flag a CRITICAL error.

4 years agocheck_mcslinux_pkglist: Fix typo in comment.
David McBride [Wed, 27 Jul 2016 10:29:29 +0000 (11:29 +0100)]
check_mcslinux_pkglist: Fix typo in comment.

4 years agocheck_mcslinux_pkglist: Respect [arch=a,b,c] tags in sources.list files.
David McBride [Wed, 27 Jul 2016 10:28:54 +0000 (11:28 +0100)]
check_mcslinux_pkglist: Respect [arch=a,b,c] tags in sources.list files.

4 years agocheck_mcslinux_pkglist: Do not emit undef warning if Release file fetching fails.
David McBride [Wed, 27 Jul 2016 10:27:41 +0000 (11:27 +0100)]
check_mcslinux_pkglist: Do not emit undef warning if Release file fetching fails.

4 years agoAdd git-fsck Nagios check tool.
David McBride [Wed, 27 Jul 2016 09:29:27 +0000 (10:29 +0100)]
Add git-fsck Nagios check tool.

4 years agoAdd script for verifing correctness of APT repository contents.
David McBride [Wed, 29 Jun 2016 11:28:59 +0000 (12:28 +0100)]
Add script for verifing correctness of APT repository contents.

4 years agoRemove i386 architecture from set of arches mirrored from Google
David McBride [Wed, 29 Jun 2016 11:17:46 +0000 (12:17 +0100)]
Remove i386 architecture from set of arches mirrored from Google

Google no-longer provide i386 builds of Chrome, and attempting to
mirror them results in debmirror, and thus dmmirror, refusing to

4 years agoAdd updated Google GPG signing keys.
David McBride [Wed, 29 Jun 2016 11:16:04 +0000 (12:16 +0100)]
Add updated Google GPG signing keys.

Retrieved from,
linked to by, this includes
both Google signing keys:

Google, Inc. Linux Package Signing Key <>
Fingerprint: 4CCA 1EAF 950C EE4A B839 76DC A040 830F 7FAC 5991

Google, Inc. (Linux Package Signing Authority) <>
Fingerprint: EB4C 1BFD 4F04 2F6D DDCC EC91 7721 F63B D38B 4796

All keys used by Google need to be present in the GPG keyring, otherwise the dmmirror
script will refuse to proceed.

4 years agoUse File::Spec->tmpdir() as location for temporary files
David McBride [Fri, 13 May 2016 17:43:33 +0000 (18:43 +0100)]
Use File::Spec->tmpdir() as location for temporary files

Unfortunately, specifying a pattern when using File::Temp
causes files to be created not in e.g. ${TMPDIR} as before,
but in the current working directory.  This breaks Nagios
in production.

Explicitly specify the path returned by File::Spec->tmpdir()
as the location to create temporary files.

4 years agoAdd template to temporary files and directories.
David McBride [Fri, 13 May 2016 16:04:26 +0000 (17:04 +0100)]
Add template to temporary files and directories.

Temporary files or directories that we create should have a useful
prefix, which is not the default.

5 years agoUpdate set of repositories being tracked and maintained.
David McBride [Thu, 18 Jun 2015 12:10:43 +0000 (13:10 +0100)]
Update set of repositories being tracked and maintained.

This adds the 2015 MCS linux repository, drops the 2012, 2013 MCS
Linux repositories (which no-longer receive updates), and similarly
drops the precise-* subrepos from the Canonical partner repository
that we mirror.

5 years agoUpdate dmmirror to use custom --onlypackages flag to debmirror
David McBride [Thu, 18 Jun 2015 12:08:56 +0000 (13:08 +0100)]
Update dmmirror to use custom --onlypackages flag to debmirror

This resolves the previous security issue whereby upstream indexes
would be blindly trusted.  This modified code has now been in
operation for several months, so can be considered stable.

5 years agoAdd ability to check non-production branches.
David McBride [Mon, 26 Jan 2015 15:48:25 +0000 (15:48 +0000)]
Add ability to check non-production branches.

5 years agoCreate a temporary directory to use as GPG's homedir.
David McBride [Fri, 23 Jan 2015 18:01:34 +0000 (18:01 +0000)]
Create a temporary directory to use as GPG's homedir.

5 years agoChange hash of Nagios status names → values to separate constants.
David McBride [Fri, 23 Jan 2015 16:53:45 +0000 (16:53 +0000)]
Change hash of Nagios status names → values to separate constants.

5 years agoRename fetch() to fetchURL() to avoid cross-package namespace collision.
David McBride [Fri, 23 Jan 2015 16:46:45 +0000 (16:46 +0000)]
Rename fetch() to fetchURL() to avoid cross-package namespace collision.

5 years agoUse perl constant constructs for constants.
David McBride [Fri, 23 Jan 2015 16:36:54 +0000 (16:36 +0000)]
Use perl constant constructs for constants.

5 years agoRemove @problems as a global variable, and pass it around by reference.
David McBride [Fri, 23 Jan 2015 16:20:25 +0000 (16:20 +0000)]
Remove @problems as a global variable, and pass it around by reference.

5 years agoAdd initial version of
David McBride [Fri, 23 Jan 2015 15:23:29 +0000 (15:23 +0000)]
Add initial version of

5 years agoUpdate dmmirror to use debmirror rather than direct rsync.
David McBride [Tue, 9 Dec 2014 13:04:12 +0000 (13:04 +0000)]
Update dmmirror to use debmirror rather than direct 

The initial version of dmmirror depended on rsync for performing all
index and package fetches.

This approach was functional, but had some problems:

 1. Not all upstream repositories of interest, such as those
    maintained by Google for Chrome, etc. support the use
    of rsync for fetching data.

 2. The previous tools did not validate the GPG signatures of the
    fetched indexes, which meant that an attacker could cause us
    to fetch and resign packages that had been tampered with.

This commit updates dmmirror to instead use debmirror for fetching
both indexes and packages from upstream.  The existing configuration
files for the Canonical partner and main Ubuntu repositories are
updated accordingly, and an additional configuration file for
mirroring the Google Chrome repository is added.

This commit also includes copies of the public keys for the Canonical,
Google, Ubuntu, and MCS Linux repositories for index validation purposes.

Unfortunately, while debmirror will validate upstream package indexes
and log any discrepencies, we're using it in an unconventional two-pass mode
and thus must necessarily disable error-handling during the first-pass
where indexes are being fetched and validated.

As a result, an attacker could cause us to accept (and sign as authentic!)
packages which have been tampered with.  This was also the case with the
previous iteration of dmmirror; we will now at least log that this has occurred.

Fixing this problem requires that we patch debmirror to add a '--skipfetches'
or similar option so that we can disable the safety-features that force us
to disable error-handling for the first-pass of the two-pass mode.

5 years agoInitial commit.
David McBride [Tue, 9 Dec 2014 12:38:54 +0000 (12:38 +0000)]
Initial commit.