From 5b23544472bb59e5f3e4c0434700bce319b81693 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?J=C3=B6rg=20Sommer?= [EMAIL PROTECTED]
Date: Mon, 5 May 2008 18:37:43 +0200
Subject: [PATCH] Add new mirror scheme ssh://
---
src/frontend/standalone/cdebootstrap.man |5 -
src/frontend/standalone/main.c | 21 +++--
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/src/frontend/standalone/cdebootstrap.man
b/src/frontend/standalone/cdebootstrap.man
index abe349a..1d3c951 100644
--- a/src/frontend/standalone/cdebootstrap.man
+++ b/src/frontend/standalone/cdebootstrap.man
@@ -6,7 +6,10 @@ cdebootstrap \- Bootstrap a Debian system
[\fIOPTION\fR]... \fISUITE TARGET \fR[\fIMIRROR\fR]
.SH DESCRIPTION
\fBcdebootstrap\fR builds a basic Debian system of \fISUITE\fR (e.g. sarge,
etch, lenny, sid) into \fITARGET\fR using the source specified in \fIMIRROR\fR.
-It supports http://, ftp:// and file:// URL and defaults to
http://ftp.debian.org/debian.
+It supports http://, ftp://, ssh:// and file:// URL and defaults to
http://ftp.debian.org/debian.
+The ssh:// scheme uses \fBcat\fR on the remote host to access the files.
+You have to setup a master connection and configure ssh to use it or use a
+key for authentication. No user interaction is possible.
The complete log is saved as \fI/var/log/bootstrap.log\fR in the new system.
.PP
Mandatory arguments to long options are mandatory for short options too.
diff --git a/src/frontend/standalone/main.c b/src/frontend/standalone/main.c
index 304cd92..9288b7d 100644
--- a/src/frontend/standalone/main.c
+++ b/src/frontend/standalone/main.c
@@ -56,7 +56,13 @@
const char *target_root;
FILE *foreign_script;
-static enum { MIRROR_SCHEME_HTTP, MIRROR_SCHEME_FTP, MIRROR_SCHEME_FILE }
mirror_scheme;
+static enum
+{
+MIRROR_SCHEME_HTTP,
+MIRROR_SCHEME_FTP,
+MIRROR_SCHEME_FILE,
+MIRROR_SCHEME_SSH
+} mirror_scheme;
static char mirror_host[128];
static char mirror_path[256];
@@ -125,6 +131,12 @@ int frontend_download (const char *source, const char
*target)
case MIRROR_SCHEME_FILE:
snprintf (buf, sizeof buf, cp %s/%s %s, mirror_path, source, target);
+ break;
+
+case MIRROR_SCHEME_SSH:
+ snprintf (buf, sizeof buf, ssh -o BatchMode=yes %s 'cat %s/%s' %s,
+mirror_host, mirror_path, source, target);
+ break;
}
ret = execute (buf);
@@ -148,6 +160,8 @@ static void check_mirror_scheme (const char **input)
mirror_scheme = MIRROR_SCHEME_FTP;
else if (!strncmp (*input, file, 4))
mirror_scheme = MIRROR_SCHEME_FILE;
+ else if (!strncmp (*input, ssh, 3))
+mirror_scheme = MIRROR_SCHEME_SSH;
else
log_text (DI_LOG_LEVEL_ERROR, Invalid mirror: scheme not supported);
@@ -283,11 +297,14 @@ static int finish_etc (void)
return 1;
}
- if (mirror_scheme == MIRROR_SCHEME_HTTP || mirror_scheme ==
MIRROR_SCHEME_FTP)
+ if (mirror_scheme == MIRROR_SCHEME_HTTP || mirror_scheme ==
MIRROR_SCHEME_FTP ||
+ mirror_scheme == MIRROR_SCHEME_SSH)
{
char *scheme = http;
if (mirror_scheme == MIRROR_SCHEME_FTP)
scheme = ftp;
+else if (mirror_scheme == MIRROR_SCHEME_SSH)
+ scheme = ssh;
if (foreign_script)
fprintf (foreign_script, \necho 'deb %s://%s%s %s main'
/etc/apt/sources.list\n\n, scheme, mirror_host, mirror_path, suite_name);
--
1.5.5.1
signature.asc
Description: Digital signature http://en.wikipedia.org/wiki/OpenPGP