- Added a new top level file that saves the REPORT_BASEDIR from the first

call to the mk/bulk/build script. This is to allow restarting the bulk
  build without getting confused by the various timestamps that occur
  during a bulk build. It also fixes some problems where the text/plain
  report had ended up in a directory different from the other files.

- Changed the default filename for the text/plain report from
  "pkgsrc-results-${BUILDDATE}.txt" to simply "report.txt", as the
  ${BUILDDATE} variable didn't give a hint to when the bulk build had been
  started, which is often more important than when the bulk build stopped.

- Changed the way to specify the directory and the URL where the bulk build
  reports are made available. See

      http://mail-index.netbsd.org/tech-pkg/2005/12/05/0002.html

  for details. Specifying the directories using the FTPHOST and FTPURL
  variables will be possible for some months, after which it support for
  it will be dropped.
This commit is contained in:
rillig 2006-01-21 11:29:31 +00:00
parent 8358f4d35e
commit 1278e33918
5 changed files with 124 additions and 47 deletions

View file

@ -1,4 +1,4 @@
# $NetBSD: bsd.bulk-pkg.mk,v 1.111 2006/01/17 22:35:13 jdc Exp $ # $NetBSD: bsd.bulk-pkg.mk,v 1.112 2006/01/21 11:29:31 rillig Exp $
# #
# Copyright (c) 1999, 2000 Hubert Feyrer <hubertf@NetBSD.org> # Copyright (c) 1999, 2000 Hubert Feyrer <hubertf@NetBSD.org>
@ -145,6 +145,10 @@ ORDERFILE?= ${BULKFILESDIR}/.order${BULK_ID}
# eventually for looking for leftover files (files not properly deinstalled) # eventually for looking for leftover files (files not properly deinstalled)
STARTFILE?= ${BULKFILESDIR}/.start${BULK_ID} STARTFILE?= ${BULKFILESDIR}/.start${BULK_ID}
# This top level file saves the bulk build ID. As it most often has a time
# stamp, it is only generated once and later retrieved from this file.
BULK_BUILD_ID_FILE?= ${BULKFILESDIR}/.bulk_build_id
# File created and used by lintpkgsrc(8) to cache package metadata for # File created and used by lintpkgsrc(8) to cache package metadata for
# pruning and bulk-upload exclusions. # pruning and bulk-upload exclusions.
LINTPKGSRC_DB?= ${BULKFILESDIR}/.lintpkgsrc.db${BULK_ID} LINTPKGSRC_DB?= ${BULKFILESDIR}/.lintpkgsrc.db${BULK_ID}

View file

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# $NetBSD: build,v 1.91 2005/12/05 10:19:14 rillig Exp $ # $NetBSD: build,v 1.92 2006/01/21 11:29:32 rillig Exp $
# #
# Copyright (c) 1999, 2000 Hubert Feyrer <hubertf@NetBSD.org> # Copyright (c) 1999, 2000 Hubert Feyrer <hubertf@NetBSD.org>
@ -48,8 +48,7 @@ The following options are supported:
one. one.
-e | --no-email -e | --no-email
Don't send email when the bulk build is finished, it will put Don't send email when the bulk build is finished.
the results into a file (FTP/pkgsrc-results.txt).
-h | --help -h | --help
Displays this message. Displays this message.
@ -279,6 +278,7 @@ load_pkgsrc_var INDEXFILE
load_pkgsrc_var ORDERFILE load_pkgsrc_var ORDERFILE
load_pkgsrc_var STARTFILE load_pkgsrc_var STARTFILE
load_pkgsrc_var SUPPORTSFILE load_pkgsrc_var SUPPORTSFILE
load_pkgsrc_var BULK_BUILD_ID_FILE
load_pkgsrc_var BUILDLOG load_pkgsrc_var BUILDLOG
load_pkgsrc_var BROKENFILE load_pkgsrc_var BROKENFILE
@ -306,6 +306,15 @@ if [ "${BULKFILESDIR}" != "${pkgsrc_dir}" ]; then
${MKDIR} "${BULKFILESDIR}" ${MKDIR} "${BULKFILESDIR}"
fi fi
#
# Save the bulk build ID in a file, as it most often contains a time
# stamp.
#
case $restart in
no) echo "${REPORT_BASEDIR}" > "${BULK_BUILD_ID_FILE}" \
|| die "Could not save the bulk build ID in ${BULK_BUILD_ID_FILE}.";;
esac
# #
# Install prerequisite packages. # Install prerequisite packages.
# #
@ -417,18 +426,22 @@ done
# Generate the post-build report. # Generate the post-build report.
# #
echo "build> Generating the bulk build report..." echo "build> Generating the bulk build report..."
BUILDDATE=`date +%Y-%m-%d`
mkdir -p "${FTP}" bulk_build_id=`cat "${BULK_BUILD_ID_FILE}"` \
|| die "Could not read the bulk build ID from ${BULK_BUILD_ID_FILE}."
report_dir="${REPORTS_DIR}/${bulk_build_id}"
${MKDIR} "${report_dir}"
( cd "${pkgsrc_dir}" \ ( cd "${pkgsrc_dir}" \
&& ${PERL5} mk/bulk/post-build \ && ${PERL5} mk/bulk/post-build \
> ${FTP}/pkgsrc-results-${BUILDDATE}.txt > "${report_dir}/${REPORT_TXT_FILE}"
) || die "Could not write the results file." ) || die "Could not write the results file."
# #
# Notify the ADMIN of the finished build. # Notify the ADMIN of the finished build.
# #
case $noemail in case $noemail in
no) cat "${FTP}/pkgsrc-results-${BUILDDATE}.txt" \ no) cat "${report_dir}/${REPORT_TXT_FILE}" \
| ${MAIL_CMD} -s "pkgsrc ${OPSYS} ${OS_VERSION}/${MACHINE_ARCH} bulk build results $BUILDDATE" "$ADMIN" | ${MAIL_CMD} -s "pkgsrc ${OPSYS} ${OS_VERSION}/${MACHINE_ARCH} bulk build results $BUILDDATE" "$ADMIN"
esac esac

View file

@ -1,4 +1,4 @@
# $NetBSD: build.conf-example,v 1.32 2005/12/03 01:00:37 rillig Exp $ # $NetBSD: build.conf-example,v 1.33 2006/01/21 11:29:32 rillig Exp $
# #
# This is an example configuration file for pkgsrc bulk builds. # This is an example configuration file for pkgsrc bulk builds.
# Actually it's a shell script that is sourced in by the pre-build, # Actually it's a shell script that is sourced in by the pre-build,
@ -61,11 +61,22 @@ ADMIN="you@some.whe.re"
# Who the report is signed by # Who the report is signed by
ADMINSIG="-Your Name" ADMINSIG="-Your Name"
# Some paths for output files and paths to log files # The directory where the final reports are collected.
FTPx=`date +%Y%m%d.%H%M` #REPORTS_DIR="$HOME/bulk-logs"
FTPURL="pub/NetBSD/pkgstat/${FTPx}" # relative to ~ftp ! REPORTS_DIR="/home/ftp/pub/NetBSD/pkgstat"
FTP="/home/ftp/${FTPURL}" # absolute base path
FTPHOST="ftp://ftp.machi.ne" # host for broken.html # The URL where the final reports will be available.
REPORTS_URL="ftp://localhost/pub/NetBSD/pkgstat"
# The basename of the directory of the current bulk build. This
# directory will be created under ${REPORTS_DIR}. After uploading the
# report, it will also be available under ${REPORTS_URL}.
REPORT_BASEDIR=`date +%Y%m%d.%H%M`
# The basenames of the the two report files, which will both be created
# in ${REPORTS_DIR}/${REPORT_BASEDIR}.
REPORT_HTML_FILE="report.html"
REPORT_TXT_FILE="report.txt"
# #
# Uploading binary packages # Uploading binary packages
@ -88,10 +99,3 @@ MKSUMS=yes
# Destination for packages and rsync options # Destination for packages and rsync options
RSYNC_DST=ftp.NetBSD.org:/pub/NetBSD/packages/pkgsrc-200xQy/NetBSD-a.b.c/i386 RSYNC_DST=ftp.NetBSD.org:/pub/NetBSD/packages/pkgsrc-200xQy/NetBSD-a.b.c/i386
RSYNC_OPTS='-e ssh' RSYNC_OPTS='-e ssh'
###########################################################################
### No changes should be needed below this line !!!
###########################################################################
# Name of the (generated) HTML file which lists all broken pkgs
REPORT="$FTP/broken.html"

View file

@ -1,5 +1,5 @@
#!/usr/pkg/bin/perl #!/usr/pkg/bin/perl
# $NetBSD: post-build,v 1.62 2005/12/03 13:39:04 rillig Exp $ # $NetBSD: post-build,v 1.63 2006/01/21 11:29:32 rillig Exp $
# #
# Collect stuff after a pkg bulk build # Collect stuff after a pkg bulk build
# #
@ -41,6 +41,23 @@ sub my_system (@) {
return system(@_); return system(@_);
} }
sub readfirstline($) {
my ($fname) = @_;
my ($contents);
open(F, "<", $fname)
or pb_die($fname, "Cannot be read: $!");
defined($contents = <F>)
or pb_die($fname, "Must not be empty.");
chomp($contents);
close(F)
or pb_die($fname, "Cannot be closed: $!");
return $contents;
}
# #
# Load configuration variables from the bulk.conf file, which is a shell # Load configuration variables from the bulk.conf file, which is a shell
# script. # script.
@ -59,7 +76,16 @@ sub get_build_conf_vars(@) {
my ($is_set, $value); my ($is_set, $value);
foreach my $varname (@varnames) { foreach my $varname (@varnames) {
open(CMD, ". '$BULK_BUILD_CONF'; echo \"\${${varname}+set}\"; echo \"\${${varname}-}\" |") my $cmd = join("\n", (
#"set -eu", # TODO: Should be enabled soon
". '${BULK_BUILD_CONF}'",
". mk/bulk/post-build-conf",
"check_config_vars",
"echo \"\${${varname}+set}\"",
"echo \"\${${varname}-}\""
));
open(CMD, "${cmd} |")
or pb_die($BULK_BUILD_CONF, "Could not evaluate configuration file."); or pb_die($BULK_BUILD_CONF, "Could not evaluate configuration file.");
chomp($is_set = <CMD>); chomp($is_set = <CMD>);
@ -91,15 +117,17 @@ sub get_build_conf_vars(@) {
get_build_conf_vars( get_build_conf_vars(
'ADMINSIG', # "-Your Name" 'ADMINSIG', # "-Your Name"
'FTPURL', # "pub/NetBSD/pkgstat/`date +%Y%m%d.%H%M`" 'REPORTS_URL', # "ftp://ftp.example.com/pub/pkgsrc/misc/pkgstat"
'FTP', # "/disk1/ftp/${FTPURL}" 'REPORTS_DIR', # "$HOME/bulk-logs"
'FTPHOST', # ftp://ftp.machi.ne/ # REPORT_BASEDIR often depends on a timestamp, which has been saved at
'REPORT', # "broken.html" # the beginning of the bulk build in the BULK_BUILD_ID_FILE. It will be
# retrieved later.
'REPORT_HTML_FILE', # "report.html"
'REPORT_TXT_FILE', # "report.txt"
'USR_PKGSRC', # "/usr/pkgsrc" 'USR_PKGSRC', # "/usr/pkgsrc"
'osrev', # `uname -r` 'osrev', # `uname -r`
); );
my $reportf = basename($vars{REPORT});
my $os = `uname -s`; my $os = `uname -s`;
chomp $os; chomp $os;
@ -151,6 +179,7 @@ get_mk_conf_vars(qw(
SUPPORTSFILE SUPPORTSFILE
X11BASE X11BASE
PKG_TOOLS_BIN PKG_TOOLS_BIN
BULK_BUILD_ID_FILE
)); ));
my $bulk_dbfile_base = basename($vars{BULK_DBFILE}); my $bulk_dbfile_base = basename($vars{BULK_DBFILE});
@ -160,6 +189,17 @@ my $supportsfile_base = basename($vars{SUPPORTSFILE});
my $indexfile_base = basename($vars{INDEXFILE}); my $indexfile_base = basename($vars{INDEXFILE});
my $orderfile_base = basename($vars{ORDERFILE}); my $orderfile_base = basename($vars{ORDERFILE});
my $reports_url = $vars{"REPORTS_URL"};
my $reports_dir = $vars{"REPORTS_DIR"};
my $report_basedir = readfirstline($vars{"BULK_BUILD_ID_FILE"});
my $report_html_file = $vars{"REPORT_HTML_FILE"};
my $report_txt_file = $vars{"REPORT_TXT_FILE"};
my $report_url = "${reports_url}/${report_basedir}";
my $report_dir = "${reports_dir}/${report_basedir}";
my $report_html_path = "${report_dir}/${report_html_file}";
my $report_txt_path = "${report_dir}/${report_txt_file}";
my $startdate = (stat($vars{STARTFILE}))[9]; my $startdate = (stat($vars{STARTFILE}))[9];
my $enddate = ''; my $enddate = '';
if (!defined($startdate) || $startdate == 0) { if (!defined($startdate) || $startdate == 0) {
@ -187,31 +227,27 @@ sub print_report_header() {
print("--------------------------------------------------------------\n"); print("--------------------------------------------------------------\n");
} }
my_system("mkdir", "-p", "--", $vars{FTP}); my_system("mkdir", "-p", "--", $report_dir);
# Copy over the output from the build process # Copy over the output from the build process
chdir($vars{"BULKFILESDIR"}) or pb_die($vars{"BULKFILESDIR"}, "Cannot change directory."); chdir($vars{"BULKFILESDIR"}) or pb_die($vars{"BULKFILESDIR"}, "Cannot change directory.");
my_system("find . -name $vars{BROKENFILE} -print -o -name $vars{BROKENWRKLOG} -print | $vars{PAX} -r -w -X $vars{FTP}"); my_system("find . -name $vars{BROKENFILE} -print -o -name $vars{BROKENWRKLOG} -print | $vars{PAX} -r -w -X ${report_dir}");
# Copy over the cache files used during the build # Copy over the cache files used during the build
foreach my $f qw(BULK_DBFILE DEPENDSTREEFILE DEPENDSFILE SUPPORTSFILE INDEXFILE ORDERFILE) { foreach my $f qw(BULK_DBFILE DEPENDSTREEFILE DEPENDSFILE SUPPORTSFILE INDEXFILE ORDERFILE) {
if (-f $vars{$f}) { if (-f $vars{$f}) {
my_system("cp", "--", $vars{$f}, $vars{FTP}); my_system("cp", "--", $vars{$f}, $report_dir);
} }
} }
chdir($vars{FTP}) or pb_die($vars{"FTP"}, "Cannot change directory."); chdir($report_dir) or pb_die($report_dir, "Cannot change directory.");
writeReport(); writeReport();
# #
# Adjust "last" symlink # Adjust "last" symlink
# #
{ unlink("${reports_dir}/last");
my ($base, $dir) = ($vars{FTP} =~ m|^(.*)/([^/]*)$|); symlink($report_basedir, "${reports_dir}/last");
unlink("$base/last");
symlink($dir, "$base/last");
}
# #
# Generate leftovers-$vars{MACHINE_ARCH}.html: files not deleted # Generate leftovers-$vars{MACHINE_ARCH}.html: files not deleted
@ -219,7 +255,7 @@ writeReport();
# and linked from leftovers-$vars{MACHINE_ARCH}.html # and linked from leftovers-$vars{MACHINE_ARCH}.html
# #
{ {
chdir($vars{FTP}); chdir($report_dir) or pb_die($report_dir, "Cannot change directory.");
my_system("mkdir", "-p", "leftovers-$vars{MACHINE_ARCH}"); my_system("mkdir", "-p", "leftovers-$vars{MACHINE_ARCH}");
# Find files since last build: # Find files since last build:
@ -270,7 +306,7 @@ writeReport();
EOOUT EOOUT
foreach (@leftovers) { foreach (@leftovers) {
chomp; chomp;
print OUT "<a href=\"$vars{FTPHOST}/$vars{FTPURL}/leftovers-$vars{MACHINE_ARCH}$_\">$_</a>\n"; print OUT "<a href=\"${report_url}/leftovers-$vars{MACHINE_ARCH}$_\">$_</a>\n";
} }
print OUT <<EOOUT2; print OUT <<EOOUT2;
</pre> </pre>
@ -369,11 +405,11 @@ EOF
Packages not listed here resulted in a binary package. The build Packages not listed here resulted in a binary package. The build
report, including logs of failed/not-packaged is available from: report, including logs of failed/not-packaged is available from:
$vars{FTPHOST}/$vars{FTPURL}/$reportf ${report_url}/${report_html_file}
EOF EOF
} }
open(HTML, ">$vars{REPORT}") or die "Can't write $vars{REPORT}: $!\n"; open(HTML, ">", $report_html_path) or die "Can't write ${report_html_path}: $!";
print HTML <<EOHTML; print HTML <<EOHTML;
<html> <html>
<head> <head>

View file

@ -1,4 +1,4 @@
# $NetBSD: post-build-conf,v 1.10 2006/01/07 22:27:56 rillig Exp $ # $NetBSD: post-build-conf,v 1.11 2006/01/21 11:29:33 rillig Exp $
# #
# This file is included after the build.conf file by the "build" and # This file is included after the build.conf file by the "build" and
@ -39,7 +39,9 @@ show_config_vars() {
pbc_section "Building the packages" \ pbc_section "Building the packages" \
PKGLIST NICE_LEVEL PKGLIST NICE_LEVEL
pbc_section "Generating the report" \ pbc_section "Generating the report" \
ADMIN ADMINSIG FTPHOST FTP ADMIN ADMINSIG \
REPORTS_URL REPORTS_DIR \
REPORT_BASEDIR REPORT_HTML_FILE REPORT_TXT_FILE
pbc_section "Uploading binary packages" \ pbc_section "Uploading binary packages" \
UPDATE_VULNERABILITY_LIST PRUNEPACKAGES MKSUMS SIGN_AS \ UPDATE_VULNERABILITY_LIST PRUNEPACKAGES MKSUMS SIGN_AS \
RSYNC_DST RSYNC_OPTS RSYNC_DST RSYNC_OPTS
@ -51,7 +53,7 @@ export_config_vars() {
export PRUNEDISTFILES ftp_proxy http_proxy export PRUNEDISTFILES ftp_proxy http_proxy
export PKGLIST NICE_LEVEL ADMIN ADMINSIG export PKGLIST NICE_LEVEL ADMIN ADMINSIG
export UPDATE_VULNERABILITY_LIST PRUNEPACKAGES MKSUMS SIGN_AS export UPDATE_VULNERABILITY_LIST PRUNEPACKAGES MKSUMS SIGN_AS
export RSYNC_DST RSYNC_OPTS FTPHOST FTP export RSYNC_DST RSYNC_OPTS
case ${MAKECONF+set} in case ${MAKECONF+set} in
"set") export MAKECONF;; "set") export MAKECONF;;
esac esac
@ -154,6 +156,20 @@ pbc_checkdefined() {
# usage: check_config_vars # usage: check_config_vars
check_config_vars() { check_config_vars() {
# Handle legacy variables FTP, FTPHOST, FTPURL, REPORT.
# Can be removed after 2006Q2.
case ${FTP+set},${REPORTS_DIR+set} in
set,set)
pbc_die "FTP and REPORTS_DIR must not be set both.";;
set,)
REPORTS_URL="${FTPHOST}"`dirname "${FTPURL}"`
REPORTS_DIR=`dirname "$FTP"`
REPORT_BASEDIR=`basename "${FTP}"`
REPORT_HTML_FILE=`basename "${REPORT}"`
REPORT_TXT_FILE="report.txt";;
esac
# section "System information" # section "System information"
pbc_checknonempty osrev pbc_checknonempty osrev
pbc_checknonempty arch pbc_checknonempty arch
@ -184,8 +200,12 @@ check_config_vars() {
# section "Generating the report" # section "Generating the report"
# no checks for ADMIN # no checks for ADMIN
# no checks for ADMINSIG # no checks for ADMINSIG
# no checks for FTPHOST pbc_checkurl REPORTS_URL
# no checks for FTP pbc_checkpathname REPORTS_DIR
pbc_checkbasename REPORT_BASEDIR
pbc_checkbasename REPORT_HTML_FILE
pbc_checkbasename REPORT_TXT_FILE
# section "Uploading binary packages" # section "Uploading binary packages"
pbc_checkyesno UPDATE_VULNERABILITY_LIST pbc_checkyesno UPDATE_VULNERABILITY_LIST