mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-04-01 21:13:09 +00:00
hardware acceleration and support for NVIDIA cards on nonfree images (#3089)
* add nvidia packages
* add nvidia deps to nonfree
* gpu_acceleration flag & nvidia hacking
* fix gpu_config & /tmp/lxc.log
* implement hardware acceleration more dynamically
* refactor OpenUI
* use mknod
* registry updates for multi-hardware-requirements
* pluralize
* handle new registry types
* remove log
* migrations and driver fixes
* wip
* misc patches
* handle nvidia-container differently
* chore: comments (#3093)
* chore: comments
* revert some sizing
---------
Co-authored-by: Matt Hill <mattnine@protonmail.com>
* Revert "handle nvidia-container differently"
This reverts commit d708ae53df.
* fix debian containers
* cleanup
* feat: add empty array placeholder in forms (#3095)
* fixes from testing, client side device filtering for better fingerprinting resistance
* fix mac builds
---------
Co-authored-by: Sam Sartor <me@samsartor.com>
Co-authored-by: Matt Hill <mattnine@protonmail.com>
Co-authored-by: Alex Inkin <alexander@inkin.ru>
This commit is contained in:
@@ -3,6 +3,7 @@ use std::path::Path;
|
||||
use tracing::instrument;
|
||||
|
||||
use crate::Error;
|
||||
use crate::prelude::*;
|
||||
use crate::util::Invoke;
|
||||
|
||||
pub async fn is_mountpoint(path: impl AsRef<Path>) -> Result<bool, Error> {
|
||||
@@ -56,3 +57,42 @@ pub async fn unmount<P: AsRef<Path>>(mountpoint: P, lazy: bool) -> Result<(), Er
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Unmounts all mountpoints under (and including) the given path, in reverse
|
||||
/// depth order so that nested mounts are unmounted before their parents.
|
||||
#[instrument(skip_all)]
|
||||
pub async fn unmount_all_under<P: AsRef<Path>>(path: P, lazy: bool) -> Result<(), Error> {
|
||||
let path = path.as_ref();
|
||||
let canonical_path = tokio::fs::canonicalize(path)
|
||||
.await
|
||||
.with_ctx(|_| (ErrorKind::Filesystem, lazy_format!("canonicalize {path:?}")))?;
|
||||
|
||||
let mounts_content = tokio::fs::read_to_string("/proc/mounts")
|
||||
.await
|
||||
.with_ctx(|_| (ErrorKind::Filesystem, "read /proc/mounts"))?;
|
||||
|
||||
// Collect all mountpoints under our path
|
||||
let mut mountpoints: Vec<&str> = mounts_content
|
||||
.lines()
|
||||
.filter_map(|line| {
|
||||
let mountpoint = line.split_whitespace().nth(1)?;
|
||||
// Check if this mountpoint is under our target path
|
||||
let mp_path = Path::new(mountpoint);
|
||||
if mp_path.starts_with(&canonical_path) {
|
||||
Some(mountpoint)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
// Sort by path length descending so we unmount deepest first
|
||||
mountpoints.sort_by(|a, b| b.len().cmp(&a.len()));
|
||||
|
||||
for mountpoint in mountpoints {
|
||||
tracing::debug!("Unmounting nested mountpoint: {}", mountpoint);
|
||||
unmount(mountpoint, lazy).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user