35 lines
1.0 KiB
Rust
35 lines
1.0 KiB
Rust
|
|
use anyhow::Result;
|
||
|
|
use tracing::info;
|
||
|
|
|
||
|
|
use crate::Router;
|
||
|
|
|
||
|
|
impl Router {
|
||
|
|
/// `opkg update` — refresh package lists.
|
||
|
|
pub fn opkg_update(&self) -> Result<()> {
|
||
|
|
info!("[{}] opkg update", self.host);
|
||
|
|
self.run_ok("opkg update")?;
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Install a package, skipping if already installed.
|
||
|
|
pub fn opkg_install(&self, package: &str) -> Result<()> {
|
||
|
|
// Check if already installed to avoid unnecessary network traffic.
|
||
|
|
let (_, code) = self.run(&format!("opkg list-installed | grep -q '^{} '", package))?;
|
||
|
|
if code == 0 {
|
||
|
|
info!("[{}] {} already installed", self.host, package);
|
||
|
|
return Ok(());
|
||
|
|
}
|
||
|
|
|
||
|
|
info!("[{}] opkg install {}", self.host, package);
|
||
|
|
self.run_ok(&format!("opkg install {}", package))?;
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Remove a package.
|
||
|
|
pub fn opkg_remove(&self, package: &str) -> Result<()> {
|
||
|
|
info!("[{}] opkg remove {}", self.host, package);
|
||
|
|
self.run_ok(&format!("opkg remove {}", package))?;
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
}
|