Compare commits

..

17 Commits

Author SHA1 Message Date
ecad003fc0 change to linux612
All checks were successful
Rust / build (push) Successful in 2m16s
update yay command
2025-05-23 19:54:10 +02:00
624b50eb8c polishing
All checks were successful
Rust / build (push) Successful in 2m2s
2025-05-22 04:35:05 +02:00
fd50d22ad4 polishing
All checks were successful
Rust / build (push) Successful in 1m58s
2025-05-22 04:31:25 +02:00
6e2e87c1dc add workflow badge 2025-05-22 04:26:57 +02:00
f2cb66ec29 code cleaning & clippy fix
All checks were successful
Rust / build (push) Successful in 2m4s
2025-05-22 03:32:48 +02:00
0c13a7b258 Byte to u64
Some checks failed
Rust / build (push) Failing after 1m20s
2025-05-22 02:36:06 +02:00
201a936b4b remove
Some checks failed
Rust / build (push) Failing after 45s
2025-05-22 02:15:01 +02:00
c7e0d01d84 change
Some checks failed
Rust / build (push) Failing after 44s
2025-05-22 02:04:47 +02:00
9fb659f779 Merge commit '77ca11c56347e8894b79c76d3b57c2f144f93f9f' 2025-05-22 01:24:20 +02:00
37a086fb67 fix & update 2025-05-22 01:10:16 +02:00
77ca11c563 gitea/workflows/rust.yaml aktualisiert
Some checks failed
Rust / build (push) Failing after 1m54s
2025-05-21 19:02:58 +02:00
24b7cb3144 gitea/workflows/rust.yaml hinzugefügt 2025-05-21 19:00:40 +02:00
df3b4c32a9 fail
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-01-07 19:48:13 +01:00
9c10606ff0 update
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-01-07 19:46:14 +01:00
b8c492cb62 update
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-01-07 19:41:08 +01:00
4d20bfaaec update
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
ci/woodpecker/manual/woodpecker Pipeline was successful
2025-01-07 19:14:48 +01:00
9d255103fe Depends & update 2025-01-07 19:04:58 +01:00
18 changed files with 868 additions and 330 deletions

View File

@ -34,7 +34,7 @@ pipeline:
commands:
- dpkg --add-architecture armel
- apt-get update
- apt-get install -y crossbuild-essential-armel libdbus-1-dev:armel --no-install-recommends
- apt-get install -y crossbuild-essential-armel libdbus-1-dev:armel libdbus-1-3:armel --no-install-recommends
- rustup target add arm-unknown-linux-gnueabi
- PKG_CONFIG=arm-linux-gnueabi-pkg-config CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_LINKER=arm-linux-gnueabi-gcc cargo build --release --target arm-unknown-linux-gnueabi
- mv target/arm-unknown-linux-gnueabi/release/alma alma-arm

1093
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,20 @@
[package]
name = "alma"
version = "0.11.0"
version = "0.11.1"
authors = ["Roey Darwish Dror, PurpleCow"]
edition = "2021"
[dependencies]
which = "4.4"
log = "0.4"
structopt = "0.3"
which = "7.0.3"
log = "0.4.27"
structopt = "0.3.26"
tempfile = "3"
serde = { version = "1", features = ["derive"] }
toml = "0.7"
byte-unit = "4.0"
nix = "0.26"
env_logger = "0.10"
toml = "0.8.22"
byte-unit = "5.1.6"
nix = { version = "0.30.1", features = ["mount"] }
env_logger = "0.11.8"
pretty_env_logger = "0.5"
dialoguer = "0.10"
console = "0.15"
dialoguer = "0.11"
console = "0.15.11"
anyhow = "1"

View File

@ -1,5 +1,6 @@
# ALMA - Arch Linux Mobile Appliance
![rust event push](https://git.spaeth.biz/Lila-Kuh/alma/actions/workflows/rust.yml/badge.svg?branch=master&event=push)
---
Almost every live Linux distribution out there is meant for a specific purpose, whether it's data
rescue, privacy, penetration testing or anything else. There are some more generic distributions
but all of them are based on squashfs, meaning that changes don't persist reboots.
@ -33,7 +34,6 @@ date without having to boot it. Encrypting the root partition is as easy as prov
- [Similar projects](#similar-projects)
- [Useful Resources](#useful-resources)
---
## Installation
You can either build the project using cargo build or install the `alma-aur` package.

View File

@ -6,7 +6,7 @@ use structopt::StructOpt;
/// Parse size argument as bytes
/// e.g. 10GB, 10GiB, etc.
fn parse_bytes(src: &str) -> Result<Byte, &'static str> {
Byte::from_str(src).map_err(|_| "Invalid image size")
Byte::parse_str(src, false).map_err(|_| "Invalid image size")
}
#[derive(StructOpt)]

View File

@ -37,10 +37,10 @@ impl FromStr for AurHelper {
install_command: vec![
String::from("yay"),
String::from("-S"),
String::from("--nocleanmenu"),
String::from("--nodiffmenu"),
String::from("--noeditmenu"),
String::from("--noupgrademenu"),
String::from("--cleanmenu=false"),
String::from("--diffmenu=false"),
String::from("--editmenu=false"),
String::from(""),
String::from("--useask"),
String::from("--removemake"),
String::from("--norebuild"),
@ -49,7 +49,7 @@ impl FromStr for AurHelper {
String::from("--answerclean"),
String::from("None"),
String::from("--mflags"),
String::from("--noconfirm"),
String::from(""),
],
}),
_ => Err(anyhow!("Error parsing AUR helper string: {}", s)),

View File

@ -9,8 +9,8 @@ SystemMaxUse=16M
pub const BASE_PACKAGES: [&str; 9] = [
"base",
"linux61",
"linux61-broadcom-wl",
"linux612",
"linux612-broadcom-wl",
"linux-firmware",
"grub",
"efibootmgr",

View File

@ -78,7 +78,7 @@ fn create_image(path: &Path, size: Byte, overwrite: bool) -> anyhow::Result<Loop
}
let file = options.open(path).context("Error creating the image")?;
file.set_len(size.get_bytes() as u64)
file.set_len(size.as_u64())
.context("Error creating the image")?;
}
@ -166,7 +166,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
sgdisk
.execute()
.args(&[
.args([
"-Z",
"-o",
&format!("--new=1::+{}M", boot_size),
@ -175,7 +175,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
"--typecode=1:EF00",
"--typecode=2:EF02",
])
.arg(&disk_path)
.arg(disk_path)
.run()
.context("Partitioning error")?;
@ -270,14 +270,14 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["passwd", "-d", "root"])
.args(["passwd", "-d", "root"])
.run()
.context("Failed to delete the root password")?;
info!("Setting locale");
fs::OpenOptions::new()
.append(true)
.write(true)
//.write(true)
.open(mount_point.path().join("etc/locale.gen"))
.and_then(|mut locale_gen| locale_gen.write_all(b"en_US.UTF-8 UTF-8\n"))
.context("Failed to create locale.gen")?;
@ -298,7 +298,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["useradd", "-m", "aur"])
.args(["useradd", "-m", "aur"])
.run()
.context("Failed to create temporary user to install AUR packages")?;
@ -309,7 +309,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["sudo", "-u", "aur"])
.args(["sudo", "-u", "aur"])
.arg("git")
.arg("clone")
.arg(format!(
@ -323,7 +323,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&[
.args([
"bash",
"-c",
&format!(
@ -337,7 +337,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["sudo", "-u", "aur"])
.args(["sudo", "-u", "aur"])
.args(&command.aur_helper.install_command)
.args(aur_pacakges)
.run()
@ -347,7 +347,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["userdel", "-r", "aur"])
.args(["userdel", "-r", "aur"])
.run()
.context("Failed to delete temporary aur user")?;
@ -413,7 +413,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["systemctl", "enable", "NetworkManager"])
.args(["systemctl", "enable", "NetworkManager"])
.run()
.context("Failed to enable NetworkManager")?;
@ -433,7 +433,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["mkinitcpio", "-p", "linux61"])
.args(["mkinitcpio", "-p", "linux612"])
.run()
.context("Failed to run mkinitcpio - do you have the base and linux packages installed?")?;
@ -444,7 +444,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
.expect("No tool for blkid")
.execute()
.arg(root_partition_base.path())
.args(&["-o", "value", "-s", "UUID"])
.args(["-o", "value", "-s", "UUID"])
.run_text_output()
.context("Failed to run blkid")?;
let trimmed = uuid.trim();
@ -467,7 +467,7 @@ fn create(command: args::CreateCommand) -> anyhow::Result<()> {
arch_chroot
.execute()
.arg(mount_point.path())
.args(&["bash", "-c"])
.args(["bash", "-c"])
.arg(format!("grub-install --target=i386-pc --boot-directory /boot {} && grub-install --target=x86_64-efi --efi-directory /boot --boot-directory /boot --removable && grub-mkconfig -o /boot/grub/grub.cfg", disk_path.display()))
.run().context("Failed to install grub")?;

View File

@ -73,7 +73,7 @@ impl<'t, 'o> EncryptedDevice<'t, 'o> {
}
}
impl<'t, 'o> Drop for EncryptedDevice<'t, 'o> {
impl Drop for EncryptedDevice<'_, '_> {
fn drop(&mut self) {
if self._close().is_err() {
warn!("Error closing {}", self.name);
@ -81,7 +81,7 @@ impl<'t, 'o> Drop for EncryptedDevice<'t, 'o> {
}
}
impl<'t, 'o> BlockDevice for EncryptedDevice<'t, 'o> {
impl BlockDevice for EncryptedDevice<'_, '_> {
fn path(&self) -> &Path {
&self.path
}

View File

@ -14,7 +14,7 @@ impl LoopDevice {
let losetup = Tool::find("losetup")?;
let output = losetup
.execute()
.args(&["--find", "-P", "--show"])
.args(["--find", "-P", "--show"])
.arg(file)
.output()
.context("Error creating the image")?;

View File

@ -23,7 +23,7 @@ impl<'a> MountStack<'a> {
filesystem: &'a Filesystem,
target: PathBuf,
options: Option<&str>,
) -> nix::Result<()> {
) -> Result<(), nix::Error> {
let source = filesystem.block().path();
debug!("Mounting {:?} to {:?}", filesystem, target);
mount(
@ -42,7 +42,7 @@ impl<'a> MountStack<'a> {
source: PathBuf,
target: PathBuf,
options: Option<&str>,
) -> nix::Result<()> {
) -> Result<(), nix::Error> {
debug!("Mounting {:?} to {:?}", source, target);
mount::<_, _, str, _>(
Some(&source),
@ -78,7 +78,7 @@ impl<'a> MountStack<'a> {
}
}
impl<'a> Drop for MountStack<'a> {
impl Drop for MountStack<'_> {
fn drop(&mut self) {
self._umount().ok();
}

View File

@ -17,7 +17,7 @@ impl<'a> Partition<'a> {
}
}
impl<'a> BlockDevice for Partition<'a> {
impl BlockDevice for Partition<'_> {
fn path(&self) -> &Path {
&self.path
}

View File

@ -1,5 +1,5 @@
use anyhow::Context;
use byte_unit::Byte;
use byte_unit::{Byte, UnitType};
use std::{fmt, fs};
#[derive(Debug)]
@ -17,7 +17,7 @@ impl fmt::Display for Device {
"{} {} ({})",
self.vendor,
self.model,
self.size.get_appropriate_unit(true)
self.size.get_appropriate_unit(UnitType::Decimal)
)
}
}
@ -60,11 +60,11 @@ pub fn get_storage_devices(allow_non_removable: bool) -> anyhow::Result<Vec<Devi
vendor: fs::read_to_string(entry.path().join("device/vendor"))
.map(trimmed)
.context("Error querying storage devices")?,
size: Byte::from_bytes(
size: Byte::from_u64(
fs::read_to_string(entry.path().join("size"))
.context("Error querying storage devices")?
.trim()
.parse::<u128>()
.parse::<u64>()
.context("Could not parse block size to unsigned integer (u128)")?
* 512,
),

View File

@ -73,10 +73,9 @@ impl<'a> StorageDevice<'a> {
let name = if self
.name
.chars()
.rev()
.next()
.next_back()
.expect("Storage device name is empty")
.is_digit(10)
.is_ascii_digit()
{
format!("{}p{}", self.name, index)
} else {
@ -93,10 +92,10 @@ impl<'a> StorageDevice<'a> {
}
}
impl<'a> BlockDevice for StorageDevice<'a> {
impl BlockDevice for StorageDevice<'_> {
fn path(&self) -> &Path {
&self.path
}
}
impl<'a> Origin for StorageDevice<'a> {}
impl Origin for StorageDevice<'_> {}

View File

@ -12,7 +12,7 @@ pub fn qemu(command: args::QemuCommand) -> anyhow::Result<()> {
let qemu = Tool::find("qemu-system-x86_64")?;
let mut run = qemu.execute();
run.args(&[
run.args([
"-m",
"4G",
"-netdev",
@ -33,7 +33,7 @@ pub fn qemu(command: args::QemuCommand) -> anyhow::Result<()> {
if PathBuf::from("/dev/kvm").exists() {
debug!("KVM is enabled");
run.args(&["-enable-kvm", "-cpu", "host"]);
run.args(["-enable-kvm", "-cpu", "host"]);
}
let err = run.exec();