From fbb62b90063f277b07f9544b2a255d7434c68db9 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 12:54:36 +0200 Subject: [PATCH 01/11] Update build workflow to create Debian package and adjust release directory --- .forgejo/workflows/build.yaml | 7 ++++++- Cargo.toml | 12 +++++++++--- src/main.rs | 8 +++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml index 9dcddd2..a467963 100644 --- a/.forgejo/workflows/build.yaml +++ b/.forgejo/workflows/build.yaml @@ -25,9 +25,14 @@ jobs: cd /tmp/phenix mkdir -p /tmp/release tar -czf /tmp/release/phenix_${{ github.ref_name }}.tar.gz . + - name: Make debian package + run: | + cargo install cargo-deb + cargo deb + cp target/debian/*.deb /tmp/release - name: Make release uses: actions/forgejo-release@v2.6.0 with: direction: upload - release-dir: /tmp/phenix + release-dir: /tmp/release token: ${{ secrets.FORGEJO_TOKEN }} \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 9b43036..e48a707 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,13 @@ [package] name = "phenix" -version = "0.1.2" +version = "0.1.3" edition = "2024" +license = "GPL-3.0-or-later" +repository="https://code.edgarpierre.fr/edpibu/phenix" +authors = ["edpibu "] -[dependencies] -regex = "1.11.1" +[package.metadata.deb] +maintainer-scripts = "debian/" + +[package.metadata.deb.systemd-units] +unit-scripts = "." diff --git a/src/main.rs b/src/main.rs index ff5d7eb..e13669e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,8 +6,7 @@ use std::io::Write; fn main() { println!("Reading kernel messages..."); - let kmsg_file = - File::open_buffered("/dev/kmsg").expect("Failed to open /dev/kmsg"); + let kmsg_file = File::open_buffered("/dev/kmsg").expect("Failed to open /dev/kmsg"); let lines = kmsg_file.lines(); for line in lines { @@ -43,8 +42,7 @@ fn echo1(path: String) { match rm_file { Err(e) => println!("Failed to open remove file at {path}: {e}"), Ok(mut file) => { - file - .write_all(b"1") + file.write_all(b"1") .expect("Failed to write to remove file"); println!("Removed device {path}"); } @@ -53,4 +51,4 @@ fn echo1(path: String) { fn rm_file_path(id: &str) -> String { format!("/sys/bus/pci/devices/{id}/remove") -} \ No newline at end of file +} From 78cd7279baff2b58a05a16a4d5c1722f0d12d4d2 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 13:02:31 +0200 Subject: [PATCH 02/11] Add Docker upload step for Debian package in build workflow --- .forgejo/workflows/build.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml index a467963..ccb49bd 100644 --- a/.forgejo/workflows/build.yaml +++ b/.forgejo/workflows/build.yaml @@ -30,6 +30,9 @@ jobs: cargo install cargo-deb cargo deb cp target/debian/*.deb /tmp/release + curl --user ${{ vars.DOCKER_PUSH_USERNAME }}:${{ secrets.DOCKER_PUSH_PASSWORD }} \ + --upload-file /tmp/release/phenix_${{ github.ref_name }}_amd64.deb \ + https://code.edgarpierre.fr/api/packages/${{ github.repository_owner }}/debian/pool/bookworm/main/upload - name: Make release uses: actions/forgejo-release@v2.6.0 with: From 9bfe63b1a93830ce8a24d48ce5529c41b305dfa6 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 13:07:30 +0200 Subject: [PATCH 03/11] Refactor build workflow to separate Debian package upload step --- .forgejo/workflows/build.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml index ccb49bd..02f4d75 100644 --- a/.forgejo/workflows/build.yaml +++ b/.forgejo/workflows/build.yaml @@ -30,12 +30,15 @@ jobs: cargo install cargo-deb cargo deb cp target/debian/*.deb /tmp/release - curl --user ${{ vars.DOCKER_PUSH_USERNAME }}:${{ secrets.DOCKER_PUSH_PASSWORD }} \ - --upload-file /tmp/release/phenix_${{ github.ref_name }}_amd64.deb \ - https://code.edgarpierre.fr/api/packages/${{ github.repository_owner }}/debian/pool/bookworm/main/upload - name: Make release uses: actions/forgejo-release@v2.6.0 with: direction: upload release-dir: /tmp/release - token: ${{ secrets.FORGEJO_TOKEN }} \ No newline at end of file + token: ${{ secrets.FORGEJO_TOKEN }} + - name: Upload debian package + run: | + cp /tmp/release/*.deb /tmp/phenix.deb + curl --user ${{ vars.DOCKER_PUSH_USERNAME }}:${{ secrets.DOCKER_PUSH_PASSWORD }} \ + --upload-file /tmp/phenix.deb \ + https://code.edgarpierre.fr/api/packages/${{ github.repository_owner }}/debian/pool/bookworm/main/upload From 28ffb566656691be6fb306b7ec2e3a811e2c161a Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 13:12:34 +0200 Subject: [PATCH 04/11] Update package description and version in Cargo.toml --- Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index e48a707..1ba57bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "phenix" -version = "0.1.3" +description = "Utility to restart PCIe devices when link is lost." +version = "0.1.4" edition = "2024" license = "GPL-3.0-or-later" repository="https://code.edgarpierre.fr/edpibu/phenix" From 8209da3b21770d1508bbb3ddfcf54d4781a12e5b Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 16:30:03 +0200 Subject: [PATCH 05/11] Refactor device reset logic to use match statement for better clarity --- Cargo.toml | 2 +- src/main.rs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1ba57bc..df814a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "phenix" description = "Utility to restart PCIe devices when link is lost." -version = "0.1.4" +version = "0.1.5" edition = "2024" license = "GPL-3.0-or-later" repository="https://code.edgarpierre.fr/edpibu/phenix" diff --git a/src/main.rs b/src/main.rs index e13669e..e0c9e24 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,8 +23,9 @@ fn manage_line(line: String) { println!("PCIe link lost {prefix}"); let id = line.splitn(3, " ").nth(1); - if let Some(id) = id { - reset_device(id); + match id { + Some(id) => reset_device(id), + None => println!("No device id found in message {line}"), } } } From 89be5b3542e1ca23aa27e7d3ef928a78fab36403 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 17:58:41 +0200 Subject: [PATCH 06/11] Use environment variable for kernel message file path --- src/main.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index e0c9e24..84db02c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ #![feature(file_buffered)] +use std::env; use std::fs::File; use std::io::BufRead; use std::io::Write; @@ -6,7 +7,9 @@ use std::io::Write; fn main() { println!("Reading kernel messages..."); - let kmsg_file = File::open_buffered("/dev/kmsg").expect("Failed to open /dev/kmsg"); + let kmsg_file = + File::open_buffered(env::var("PHENIX_KMSG").unwrap_or(String::from("/dev/kmsg"))) + .expect("Failed to open /dev/kmsg"); let lines = kmsg_file.lines(); for line in lines { From f4374459ddcab0ddcf1b2c2479570eff69c8243f Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 18:42:48 +0200 Subject: [PATCH 07/11] Refactor kernel message file handling to improve readability and add debugging output --- src/main.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 84db02c..46e1964 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,14 +3,18 @@ use std::env; use std::fs::File; use std::io::BufRead; use std::io::Write; +use std::io::Seek; +use std::io::SeekFrom; fn main() { println!("Reading kernel messages..."); - let kmsg_file = + let mut kmsg_file = File::open_buffered(env::var("PHENIX_KMSG").unwrap_or(String::from("/dev/kmsg"))) .expect("Failed to open /dev/kmsg"); + + kmsg_file.seek(SeekFrom::End(0)).expect("Failed to seek to end"); let lines = kmsg_file.lines(); for line in lines { match line { @@ -21,6 +25,7 @@ fn main() { } fn manage_line(line: String) { + dbg!(&line); if let Some((prefix, line)) = line.split_once(";") { if line.ends_with("PCIe link lost") { println!("PCIe link lost {prefix}"); From f7c9605f269f2182c10af0e2db61ea21f6ec6176 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 18:43:03 +0200 Subject: [PATCH 08/11] Update package version to 0.2.0 in Cargo.toml --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index df814a7..714889d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "phenix" description = "Utility to restart PCIe devices when link is lost." -version = "0.1.5" +version = "0.2.0" edition = "2024" license = "GPL-3.0-or-later" repository="https://code.edgarpierre.fr/edpibu/phenix" From fefcbe43737f71fd6774895ca7d5c868c5561e20 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 22:19:06 +0200 Subject: [PATCH 09/11] Remove debug statement from manage_line function --- src/main.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 46e1964..a0e8fd5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,7 +25,6 @@ fn main() { } fn manage_line(line: String) { - dbg!(&line); if let Some((prefix, line)) = line.split_once(";") { if line.ends_with("PCIe link lost") { println!("PCIe link lost {prefix}"); From 86cf230f21c757c473f189f8d8d2f1e26be1a0f8 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 14 May 2025 22:22:29 +0200 Subject: [PATCH 10/11] Bump package version to 0.2.1 in Cargo.toml --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 714889d..3734388 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "phenix" description = "Utility to restart PCIe devices when link is lost." -version = "0.2.0" +version = "0.2.1" edition = "2024" license = "GPL-3.0-or-later" repository="https://code.edgarpierre.fr/edpibu/phenix" From bc090fa9b25469a0b71292c25805079a453f86ce Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 21 May 2025 13:53:13 +0200 Subject: [PATCH 11/11] Remove redundant log statement in echo1 and add confirmation log in reset_device --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index a0e8fd5..a9e001c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,6 +41,7 @@ fn manage_line(line: String) { fn reset_device(id: &str) { println!("Resetting {id}"); echo1(rm_file_path(&id)); + println!("Removed device {id}"); echo1(String::from("/sys/bus/pci/rescan")); println!("Rescanned PCI bus"); } @@ -52,7 +53,6 @@ fn echo1(path: String) { Ok(mut file) => { file.write_all(b"1") .expect("Failed to write to remove file"); - println!("Removed device {path}"); } } }