Compare commits
11 commits
Author | SHA1 | Date | |
---|---|---|---|
bc090fa9b2 | |||
86cf230f21 | |||
fefcbe4373 | |||
f7c9605f26 | |||
f4374459dd | |||
89be5b3542 | |||
8209da3b21 | |||
28ffb56665 | |||
9bfe63b1a9 | |||
78cd7279ba | |||
fbb62b9006 |
3 changed files with 37 additions and 13 deletions
|
@ -25,9 +25,20 @@ jobs:
|
||||||
cd /tmp/phenix
|
cd /tmp/phenix
|
||||||
mkdir -p /tmp/release
|
mkdir -p /tmp/release
|
||||||
tar -czf /tmp/release/phenix_${{ github.ref_name }}.tar.gz .
|
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
|
- name: Make release
|
||||||
uses: actions/forgejo-release@v2.6.0
|
uses: actions/forgejo-release@v2.6.0
|
||||||
with:
|
with:
|
||||||
direction: upload
|
direction: upload
|
||||||
release-dir: /tmp/phenix
|
release-dir: /tmp/release
|
||||||
token: ${{ secrets.FORGEJO_TOKEN }}
|
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
|
||||||
|
|
13
Cargo.toml
13
Cargo.toml
|
@ -1,7 +1,14 @@
|
||||||
[package]
|
[package]
|
||||||
name = "phenix"
|
name = "phenix"
|
||||||
version = "0.1.2"
|
description = "Utility to restart PCIe devices when link is lost."
|
||||||
|
version = "0.2.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
license = "GPL-3.0-or-later"
|
||||||
|
repository="https://code.edgarpierre.fr/edpibu/phenix"
|
||||||
|
authors = ["edpibu <contact@edgarpierre.fr>"]
|
||||||
|
|
||||||
[dependencies]
|
[package.metadata.deb]
|
||||||
regex = "1.11.1"
|
maintainer-scripts = "debian/"
|
||||||
|
|
||||||
|
[package.metadata.deb.systemd-units]
|
||||||
|
unit-scripts = "."
|
||||||
|
|
22
src/main.rs
22
src/main.rs
|
@ -1,14 +1,20 @@
|
||||||
#![feature(file_buffered)]
|
#![feature(file_buffered)]
|
||||||
|
use std::env;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::BufRead;
|
use std::io::BufRead;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use std::io::Seek;
|
||||||
|
use std::io::SeekFrom;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Reading kernel messages...");
|
println!("Reading kernel messages...");
|
||||||
|
|
||||||
let kmsg_file =
|
let mut kmsg_file =
|
||||||
File::open_buffered("/dev/kmsg").expect("Failed to open /dev/kmsg");
|
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();
|
let lines = kmsg_file.lines();
|
||||||
for line in lines {
|
for line in lines {
|
||||||
match line {
|
match line {
|
||||||
|
@ -24,8 +30,9 @@ fn manage_line(line: String) {
|
||||||
println!("PCIe link lost {prefix}");
|
println!("PCIe link lost {prefix}");
|
||||||
|
|
||||||
let id = line.splitn(3, " ").nth(1);
|
let id = line.splitn(3, " ").nth(1);
|
||||||
if let Some(id) = id {
|
match id {
|
||||||
reset_device(id);
|
Some(id) => reset_device(id),
|
||||||
|
None => println!("No device id found in message {line}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +41,7 @@ fn manage_line(line: String) {
|
||||||
fn reset_device(id: &str) {
|
fn reset_device(id: &str) {
|
||||||
println!("Resetting {id}");
|
println!("Resetting {id}");
|
||||||
echo1(rm_file_path(&id));
|
echo1(rm_file_path(&id));
|
||||||
|
println!("Removed device {id}");
|
||||||
echo1(String::from("/sys/bus/pci/rescan"));
|
echo1(String::from("/sys/bus/pci/rescan"));
|
||||||
println!("Rescanned PCI bus");
|
println!("Rescanned PCI bus");
|
||||||
}
|
}
|
||||||
|
@ -43,14 +51,12 @@ fn echo1(path: String) {
|
||||||
match rm_file {
|
match rm_file {
|
||||||
Err(e) => println!("Failed to open remove file at {path}: {e}"),
|
Err(e) => println!("Failed to open remove file at {path}: {e}"),
|
||||||
Ok(mut file) => {
|
Ok(mut file) => {
|
||||||
file
|
file.write_all(b"1")
|
||||||
.write_all(b"1")
|
|
||||||
.expect("Failed to write to remove file");
|
.expect("Failed to write to remove file");
|
||||||
println!("Removed device {path}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rm_file_path(id: &str) -> String {
|
fn rm_file_path(id: &str) -> String {
|
||||||
format!("/sys/bus/pci/devices/{id}/remove")
|
format!("/sys/bus/pci/devices/{id}/remove")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue