aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalen Guyer <galen@galenguyer.com>2023-01-14 01:12:10 -0500
committerGalen Guyer <galen@galenguyer.com>2023-01-14 01:12:10 -0500
commita6d0a78b4adc3abec6e6c980ae027f4a749b85bb (patch)
tree3790866b82b0a3ca05031de08cb0104e388bc803
parent41766ce42a65e8d67e031bb941859149df6a61c1 (diff)
succesfully build package
-rw-r--r--makepkg.conf2
-rw-r--r--pacman.conf4
-rw-r--r--src/bin/build-pkg.rs125
-rw-r--r--src/bin/create-chroot.rs9
-rw-r--r--src/bin/create-repo.rs1
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 {