Here are proposed patches for choose-mirror, cdrom-detect and iso-scan that determine the codename that goes with the suite that will be installed. The idea is, when creating lines for /target/etc/apt/sources.list, to check if mirror/codename is set and, if it is, to use that instead of mirror/suite (as discussed after the release of Sarge). There is some code duplication in choose-mirror.c, but my C skills are not sufficient to solve that. Comments welcome. If OK, I will commit them. Cheers, FJP
Index: debian/cdrom-detect.templates =================================================================== --- debian/cdrom-detect.templates (revision 31641) +++ debian/cdrom-detect.templates (working copy) @@ -106,6 +106,10 @@ that receives many of the new versions from unstable if they are not too buggy. +Template: mirror/codename +Type: string +Description: Codename for the selected suite (internal use) + Template: prebaseconfig/progress/cdrom-detect Type: text # Prebaseconfig progress bar item Index: debian/changelog =================================================================== --- debian/changelog (revision 31641) +++ debian/changelog (working copy) @@ -1,3 +1,10 @@ +cdrom-detect (1.11) UNRELEASED; urgency=low + + * Also determine de codename of the release. This can be used later to + set apt sources by codename. + + -- Frans Pop <fjp@debian.org> Sun, 23 Oct 2005 16:57:08 +0200 + cdrom-detect (1.10) unstable; urgency=low [ Colin Watson ] Index: debian/cdrom-detect.postinst =================================================================== --- debian/cdrom-detect.postinst (revision 31641) +++ debian/cdrom-detect.postinst (working copy) @@ -154,18 +154,20 @@ done db_progress STOP -# Set the suite used by base-installer and base-config to -# the suite that is on the CD. This assumes that there will -# be no more than one distribution on the CD, and that one of the -# testing, stable, or unstable links will point to it. Since the +# Set the suite and codename used by base-installer and base-config +# to the suite/codename that is on the CD. This assumes that there +# will be no more than one distribution on the CD, and that one of +# the testing, stable, or unstable links will point to it. Since the # CDs currently have many links, parse the Release file to get the # actual suite name to use. for distlink in stable testing unstable ; do relfile=/cdrom/dists/$distlink/Release if [ -e $relfile ] ; then suite=$(sed -n 's/^Suite: *//p' $relfile) - log "Detected CD with '$suite' distribution" + codename=$(sed -n 's/^Codename: *//p' $relfile) + log "Detected CD with '$suite' ($codename) distribution" db_set mirror/suite $suite + db_set mirror/codename $codename break fi
Index: debian/changelog
===================================================================
--- debian/changelog (revision 31641)
+++ debian/changelog (working copy)
@@ -38,6 +38,8 @@
[ Frans Pop ]
* Make sure mirror/protocol template is included.
+ * After a suite has been selected, also determine its codename. This
+ can be used later to set apt sources by codename.
-- Frans Pop <fjp@debian.org> Sun, 23 Oct 2005 15:59:08 +0200
Index: debian/choose-mirror.templates-in
===================================================================
--- debian/choose-mirror.templates-in (revision 31641)
+++ debian/choose-mirror.templates-in (working copy)
@@ -17,6 +17,10 @@
that receives many of the new versions from unstable if they are not too
buggy.
+Template: mirror/codename
+Type: string
+Description: codename for the selected suite (internal use)
+
Template: mirror/checking_title
Type: text
_Description: Checking the Debian archive mirror
Index: choose-mirror.c
===================================================================
--- choose-mirror.c (revision 31641)
+++ choose-mirror.c (working copy)
@@ -407,6 +407,56 @@
}
}
+/* Get the codename for the selected suite. I think having the codename should
+ * be optional (at least for now), so return 0 on errors.
+ */
+int get_codename (void) {
+ char *command;
+ FILE *f = NULL;
+ char *hostname, *directory, *suite;
+ int i;
+
+ hostname = add_protocol("hostname");
+ debconf_get(debconf, hostname);
+ free(hostname);
+ hostname = strdup(debconf->value);
+ directory = add_protocol("directory");
+ debconf_get(debconf, directory);
+ free(directory);
+ directory = strdup(debconf->value);
+ /* The suite has been determined previously, so this should not fail */
+ debconf_get(debconf, DEBCONF_BASE "suite");
+ if (strlen(debconf->value) > 0) {
+ suite = strdup(debconf->value);
+ }
+ else {
+ return 0;
+ }
+
+ asprintf(&command, "wget -q %s://%s%s/dists/%s/Release -O - | grep ^Codename: | cut -d' ' -f 2",
+ protocol, hostname, directory, suite);
+ di_log(DI_LOG_LEVEL_DEBUG, "command: %s", command);
+ f = popen(command, "r");
+ free(command);
+
+ if (f != NULL) {
+ char buf[SUITE_LENGTH];
+ if (fgets(buf, SUITE_LENGTH - 1, f)) {
+ if (buf[strlen(buf) - 1] == '\n')
+ buf[strlen(buf) - 1] = '\0';
+ debconf_set(debconf, DEBCONF_BASE "codename", buf);
+ di_log(DI_LOG_LEVEL_DEBUG, "codename set to: %s", buf);
+ }
+ }
+ pclose(f);
+
+ free(hostname);
+ free(directory);
+ free(suite);
+
+ return 0;
+}
+
int main (void) {
/* Use a state machine with a function to run in each state */
int state = 0;
@@ -420,6 +470,7 @@
set_proxy,
validate_mirror,
choose_suite,
+ get_codename,
NULL,
};
Index: debian/changelog
===================================================================
--- debian/changelog (revision 31641)
+++ debian/changelog (working copy)
@@ -1,3 +1,10 @@
+iso-scan (1.10) UNRELEASED; urgency=low
+
+ * Also determine de codename of the release. This can be used later to
+ set apt sources by codename.
+
+ -- Frans Pop <fjp@debian.org> Sun, 23 Oct 2005 16:58:23 +0200
+
iso-scan (1.09) unstable; urgency=low
* Queue apt-mirror-setup for install, this is part of the apt-setup
Index: debian/iso-scan.templates
===================================================================
--- debian/iso-scan.templates (revision 31641)
+++ debian/iso-scan.templates (working copy)
@@ -12,6 +12,10 @@
that receives many of the new versions from unstable if they are not too
buggy.
+Template: mirror/codename
+Type: string
+Description: Codename for the selected suite (internal use)
+
Template: iso-scan/detect_progress_title
Type: text
_Description: Detecting hardware to find hard drives
Index: debian/iso-scan.postinst
===================================================================
--- debian/iso-scan.postinst (revision 31641)
+++ debian/iso-scan.postinst (working copy)
@@ -30,18 +30,20 @@
}
register_cd () {
- # Set the suite used by base-installer and base-config to
- # the suite that is on the CD. This assumes that there will
- # be no more than one distribution on the CD, and that one of the
- # testing, stable, or unstable links will point to it. Since the
+ # Set the suite and codename used by base-installer and base-config
+ # to the suite/codename that is on the CD. This assumes that there
+ # will be no more than one distribution on the CD, and that one of
+ # the testing, stable, or unstable links will point to it. Since the
# CDs currently have many links, parse the Release file to get the
# actual suite name to use.
for distlink in stable testing unstable ; do
relfile=/cdrom/dists/$distlink/Release
if [ -e $relfile ] ; then
suite=$(sed -n 's/^Suite: *//p' $relfile)
- log "Detected ISO with '$suite' distribution"
+ codename=$(sed -n 's/^Codename: *//p' $relfile)
+ log "Detected ISO with '$suite' ($codename) distribution"
db_set mirror/suite $suite
+ db_set mirror/codename $codename
db_subst iso-scan/success SUITE $suite
description=`sed -n 's/^Description: *//p' $relfile`
Attachment:
pgpwDZP2Zf2wo.pgp
Description: PGP signature