[pve-devel] [PATCH proxmox-offline-mirror 2/3] mirror setup: query filters in guided mode
Fabian Grünbichler
f.gruenbichler at proxmox.com
Fri Oct 21 11:12:43 CEST 2022
with a somewhat sensible default of filtering the games and debug
sections - which already reduces a mirror of PVE + Debian bullseye by
about 27% (105GB->77GB).
Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
src/bin/proxmox-offline-mirror.rs | 42 ++++++++++++++++++++-----------
1 file changed, 28 insertions(+), 14 deletions(-)
diff --git a/src/bin/proxmox-offline-mirror.rs b/src/bin/proxmox-offline-mirror.rs
index 07b6ce6..67036f1 100644
--- a/src/bin/proxmox-offline-mirror.rs
+++ b/src/bin/proxmox-offline-mirror.rs
@@ -96,7 +96,20 @@ fn derive_debian_repo(
release: &Release,
variant: &DebianVariant,
components: &str,
-) -> (String, String, String) {
+) -> Result<(String, String, String, SkipConfig), Error> {
+ println!("Configure filters for Debian mirror {release} / {variant}:");
+ let skip_sections = match read_string_from_tty("\tEnter list of package sections to be skipped ('-' for None):", Some("debug,games"))?.as_str() {
+ "-" => None,
+ list => Some(list.split(',').map(|v| v.trim().to_owned()).collect::<Vec<String>>()),
+ };
+ let skip_packages = match read_string_from_tty("\tEnter list of package names/name globs to be skipped ('-' for None):", None)?.as_str() {
+ "-" => None,
+ list => Some(list.split(',').map(|v| v.trim().to_owned()).collect::<Vec<String>>()),
+ };
+ let filters = SkipConfig {
+ skip_packages,
+ skip_sections,
+ };
let url = match (release, variant) {
(Release::Bullseye, DebianVariant::Main) => "http://deb.debian.org/debian bullseye",
(Release::Bullseye, DebianVariant::Security) => {
@@ -138,14 +151,14 @@ fn derive_debian_repo(
let suggested_id = format!("debian_{release}_{variant}");
- (url, key.to_string(), suggested_id)
+ Ok((url, key.to_string(), suggested_id, filters))
}
fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Error> {
let mut use_subscription = None;
let mut extra_repos = Vec::new();
- let (repository, key_path, architectures, suggested_id) = if read_bool_from_tty(
+ let (repository, key_path, architectures, suggested_id, skip) = if read_bool_from_tty(
"Guided Setup",
Some(true),
)? {
@@ -163,7 +176,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
let mut add_debian_repo = false;
- let (url, key_path, suggested_id) = match dist {
+ let (url, key_path, suggested_id, skip) = match dist {
Distro::Debian => {
let variants = &[
(DebianVariant::Main, "Main repository"),
@@ -179,7 +192,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
Some("main contrib non-free"),
)?;
- derive_debian_repo(release, variant, &components)
+ derive_debian_repo(release, variant, &components)?
}
Distro::PveCeph => {
enum CephRelease {
@@ -231,7 +244,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
);
let suggested_id = format!("ceph_{ceph_release}_{release}");
- (url, key.to_string(), suggested_id)
+ (url, key.to_string(), suggested_id, SkipConfig::default())
}
product => {
let variants = &[
@@ -272,7 +285,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
Some(true),
)?;
- (url, key.to_string(), suggested_id)
+ (url, key.to_string(), suggested_id, SkipConfig::default())
}
};
@@ -283,23 +296,24 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
release,
&DebianVariant::Main,
"main contrib",
- ));
+ )?);
extra_repos.push(derive_debian_repo(
release,
&DebianVariant::Updates,
"main contrib",
- ));
+ )?);
extra_repos.push(derive_debian_repo(
release,
&DebianVariant::Security,
"main contrib",
- ));
+ )?);
}
(
format!("deb {url}"),
key_path,
architectures,
Some(suggested_id),
+ skip,
)
} else {
let repo = read_string_from_tty("Enter repository line in sources.list format", None)?;
@@ -329,7 +343,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
)?
.clone();
- (repo, key_path, architectures, None)
+ (repo, key_path, architectures, None, SkipConfig::default())
};
if !Path::new(&key_path).exists() {
@@ -371,7 +385,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
let mut configs = Vec::with_capacity(extra_repos.len() + 1);
- for (url, key_path, suggested_id) in extra_repos {
+ for (url, key_path, suggested_id, skip) in extra_repos {
if config.sections.contains_key(&suggested_id) {
eprintln!("config section '{suggested_id}' already exists, skipping..");
} else {
@@ -387,7 +401,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
base_dir: base_dir.clone(),
use_subscription: None,
ignore_errors: false,
- skip: SkipConfig::default(), // TODO sensible default?
+ skip,
});
}
}
@@ -402,7 +416,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
base_dir,
use_subscription,
ignore_errors: false,
- skip: SkipConfig::default(),
+ skip,
};
configs.push(main_config);
--
2.30.2
More information about the pve-devel
mailing list