diff options
author | Galen Guyer <galen@galenguyer.com> | 2023-01-14 01:12:10 -0500 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2023-01-14 01:12:10 -0500 |
commit | a6d0a78b4adc3abec6e6c980ae027f4a749b85bb (patch) | |
tree | 3790866b82b0a3ca05031de08cb0104e388bc803 | |
parent | 41766ce42a65e8d67e031bb941859149df6a61c1 (diff) |
succesfully build package
-rw-r--r-- | makepkg.conf | 2 | ||||
-rw-r--r-- | pacman.conf | 4 | ||||
-rw-r--r-- | src/bin/build-pkg.rs | 125 | ||||
-rw-r--r-- | src/bin/create-chroot.rs | 9 | ||||
-rw-r--r-- | src/bin/create-repo.rs | 1 |
5 files changed, 95 insertions, 46 deletions
diff --git a/makepkg.conf b/makepkg.conf index 5cf72d4..8b7ca48 100644 --- a/makepkg.conf +++ b/makepkg.conf @@ -48,7 +48,7 @@ LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" LTOFLAGS="-flto=auto" #RUSTFLAGS="-C opt-level=2" #-- Make Flags: change this for DistCC/SMP systems -MAKEFLAGS="-j$(nproc)" +MAKEFLAGS="-j12" #-- Debugging flags DEBUG_CFLAGS="-g" DEBUG_CXXFLAGS="$DEBUG_CFLAGS" diff --git a/pacman.conf b/pacman.conf index 768c96d..85cf4a4 100644 --- a/pacman.conf +++ b/pacman.conf @@ -90,3 +90,7 @@ Include = /etc/pacman.d/mirrorlist #[custom] #SigLevel = Optional TrustAll #Server = file:///home/custompkgs + +[pkgbuild] +SigLevel = Optional TrustAll +Server = file:///mnt/pkgbuild diff --git a/src/bin/build-pkg.rs b/src/bin/build-pkg.rs index 40f67fe..44d91c2 100644 --- a/src/bin/build-pkg.rs +++ b/src/bin/build-pkg.rs @@ -1,3 +1,5 @@ +use alpm::Alpm; +use pkgbuild::PackageMeta; use std::process::{Child, Command}; #[tokio::main] @@ -7,6 +9,10 @@ async fn main() { let handle = pkgbuild::setup_alpm(); + build_pkg(&package_name, &package_list, &handle); +} + +fn build_pkg(package_name: &str, package_list: &[PackageMeta], handle: &Alpm) { let package = package_list.iter().find(|p| p.name == package_name); if package.is_none() { println!("Package {} not found", package_name); @@ -15,11 +21,11 @@ async fn main() { let package = package.expect("package is None"); let dependencies = package.resolve_dependencies(&handle, &package_list); - for dependency in dependencies - .iter() - .filter(|d| matches!(d, pkgbuild::Dependency::AUR(_))) - { - dbg!(dependency); + for dependency in dependencies { + match dependency { + pkgbuild::Dependency::AUR(dep) => build_pkg(&dbg!(dep).name, &package_list, &handle), + _ => (), + } } let pkg_dir = format!( @@ -58,28 +64,7 @@ async fn main() { } let mut command = Command::new("makepkg"); - command - .current_dir(&pkg_dir) - .arg("--packagelist"); - dbg!(&command); - let output = command.output().expect("Failed to execute command"); - let package_list = String::from_utf8(output.stdout) - .unwrap() - .trim() - .to_string() - .split_whitespace() - .map(String::from) - .collect::<Vec<String>>(); - println!("{:?}", package_list); - if package_list.iter().all(|p| dbg!(std::path::Path::new(dbg!(&p)).exists())) { - println!("{package_name} already built"); - return; - } - - let mut command = Command::new("makepkg"); - command - .current_dir(&pkg_dir) - .arg("--packagelist"); + command.current_dir(&pkg_dir).arg("--packagelist"); dbg!(&command); let output = command.output().expect("Failed to execute command"); let package_list = String::from_utf8(output.stdout) @@ -90,23 +75,81 @@ async fn main() { .map(String::from) .collect::<Vec<String>>(); println!("{:?}", package_list); + if package_list + .iter() + .all(|p| dbg!(std::path::Path::new(dbg!(&p)).exists())) + { + println!("{package_name} already built, skipping fresh build"); + } else { + let chroot_dir = std::env::var("PKGBUILD_CHROOT_DIR") + .unwrap_or_else(|_| String::from("/var/lib/pkgbuild")) + .trim_end_matches('/') + .to_string(); - let chroot_dir = std::env::var("PKGBUILD_CHROOT_DIR") - .unwrap_or_else(|_| String::from("/var/lib/pkgbuild")) - .trim_end_matches('/') - .to_string(); + let mut command = Command::new("makechrootpkg"); + command + .current_dir(&pkg_dir) + .arg("-u") + .arg("-l") + .arg(&package_name) + .arg("-r") + .arg(chroot_dir) + .arg("-D") + .arg(format!( + "{}/pacman.conf:/etc/pacman.conf", + std::env::current_dir().unwrap().display() + )) + .arg("-D") + .arg(format!( + "{}/makepkg.conf:/etc/makepkg.conf", + std::env::current_dir().unwrap().display() + )) + .arg("-D") + .arg("/tmp/repo:/mnt/pkgbuild") + .arg("-d") + .arg("/var/cache/pacman/pkg/") + .arg("--") + .args(["--skippgpcheck", "--syncdeps"]); + dbg!(&command); + print_status(command.spawn()); + } - let mut command = Command::new("makechrootpkg"); - command - .current_dir(&pkg_dir) - .arg("-l") - .arg(&package_name) - .arg("-r") - .arg(chroot_dir) - .arg("--") - .args(["--skippgpcheck", "--syncdeps"]); + let mut command = Command::new("repo-add"); + if let Ok(gpg_sign) = std::env::var("PKGBUILD_GPG_SIGN") { + if gpg_sign == "true" || gpg_sign == "1" { + command.arg("--sign"); + } + } + if let Ok(gpg_key) = std::env::var("PKGBUILD_GPG_KEY") { + command.arg("--key").arg(gpg_key); + } + command.arg("--remove"); + command.arg(format!( + "{}/{}.db.tar.zst", + std::env::var("PKGBUILD_REPO_ROOT") + .expect("PKGBUILD_REPO_ROOT not set") + .trim_end_matches('/'), + std::env::var("PKGBUILD_REPO_NAME").expect("PKGBUILD_REPO_NAME not set"), + )); + for package in &package_list { + command.arg(package); + } dbg!(&command); - // print_status(command.spawn()); + print_status(command.spawn()); + for package in &package_list { + std::fs::copy( + package, + format!( + "{}/{}", + std::env::var("PKGBUILD_REPO_ROOT") + .expect("PKGBUILD_REPO_ROOT not set") + .trim_end_matches('/'), + std::path::Path::new(&package).file_name().unwrap().to_string_lossy() + ), + ) + .expect("Failed to copy package"); + // TODO: Don't forget to copy sigs! + } } fn print_status(output: Result<Child, std::io::Error>) { diff --git a/src/bin/create-chroot.rs b/src/bin/create-chroot.rs index 6592202..4359a3e 100644 --- a/src/bin/create-chroot.rs +++ b/src/bin/create-chroot.rs @@ -6,13 +6,14 @@ fn main() { .trim_end_matches('/') .to_string(); - let mut command = Command::new("mkdir"); - command.arg("-p").arg(&chroot_dir); + let mut command = Command::new("sudo"); + command.arg("mkdir").arg("-p").arg(&chroot_dir); dbg!(&command); print_status(command.spawn()); - let mut command = Command::new("chown"); + let mut command = Command::new("sudo"); command + .arg("chown") .arg(format!( "{}:{}", get_username().unwrap(), @@ -25,7 +26,7 @@ fn main() { let mut command = Command::new("mkarchroot"); command .arg("-C") - .arg("pacman.conf") + .arg("/usr/share/devtools/pacman-extra.conf") .arg("-M") .arg("makepkg.conf") .arg(format!("{chroot_dir}/root")) diff --git a/src/bin/create-repo.rs b/src/bin/create-repo.rs index 68514cd..4680103 100644 --- a/src/bin/create-repo.rs +++ b/src/bin/create-repo.rs @@ -18,6 +18,7 @@ fn main() { std::env::var("PKGBUILD_REPO_NAME").expect("PKGBUILD_REPO_NAME not set"), )); + // TODO: command.spawn() let output = command.output(); match output { |