patchmon : Linux Patch Monitoring software opensource
I've had an issue where I wanted something self-hosted, clean and simple to monitor my linux servers update status.
Current working features:
Dashboard on hosts summary / status
Easily register hosts with the app
View and search for packages that have been installed
Planned features:
Authentication improvements : Each host to authenticate via unique api credentials to patchmon
Ability to add Clients, Locations and host groups so that hosts can be associated to them
PDF Report generation of single host or group of hosts
This will be opensource and I will be releasing by the 1st of September.
I'm open to people who want to give me feature requests and contribute to the app - It's written in Next JS for both the backend and frontend.
Open to ideas, constructive criticism and security ideas / features.
No ports on the host need to be opened as the hosts will push the collected information to patchmon (either self-hosted or we will offer a cloud hosted one for a small fee).
https://patchmon.net/ to register on the wait list
Thanks team :)
https://preview.redd.it/j7971ks1kkhf1.png?width=3093&format=png&auto=webp&s=c13f2572d1927de1be6a71915aaa0d038b632097
https://redd.it/1mjxd2y
@r_linux
I've had an issue where I wanted something self-hosted, clean and simple to monitor my linux servers update status.
Current working features:
Dashboard on hosts summary / status
Easily register hosts with the app
View and search for packages that have been installed
Planned features:
Authentication improvements : Each host to authenticate via unique api credentials to patchmon
Ability to add Clients, Locations and host groups so that hosts can be associated to them
PDF Report generation of single host or group of hosts
This will be opensource and I will be releasing by the 1st of September.
I'm open to people who want to give me feature requests and contribute to the app - It's written in Next JS for both the backend and frontend.
Open to ideas, constructive criticism and security ideas / features.
No ports on the host need to be opened as the hosts will push the collected information to patchmon (either self-hosted or we will offer a cloud hosted one for a small fee).
https://patchmon.net/ to register on the wait list
Thanks team :)
https://preview.redd.it/j7971ks1kkhf1.png?width=3093&format=png&auto=webp&s=c13f2572d1927de1be6a71915aaa0d038b632097
https://redd.it/1mjxd2y
@r_linux
PatchMon
PatchMon - Linux Patch Management & Cloud Membership Plans
PatchMon Cloud Membership - Managed Linux patch management service. Choose from 10, 100, or 250 host plans. Monitor security updates, package vulnerabilities across Ubuntu, Debian, CentOS, RHEL, Fedora.
FFmpeg is switching development from mailing list to Git forge "Forgejo"
https://code.ffmpeg.org/FFmpeg/FFmpeg
https://redd.it/1mjzl4e
@r_linux
https://code.ffmpeg.org/FFmpeg/FFmpeg
https://redd.it/1mjzl4e
@r_linux
FFmpeg Forgejo
Android 16 lets the Linux Terminal use your phone's entire storage
https://www.androidauthority.com/android-16-terminal-disk-resize-3546144/
https://redd.it/1mk0jir
@r_linux
https://www.androidauthority.com/android-16-terminal-disk-resize-3546144/
https://redd.it/1mk0jir
@r_linux
Android Authority
Android 16 lets the Linux Terminal use your phone's entire storage
Android 16 allows you to allocate your phone's entire storage to the Linux Terminal. QPR1 takes things further with dynamic allocation.
BMW, Mercedes-Benz, Volkswagen and other companies from the automotive industry have agreed on pre-competitive cooperation in software development on an open source basis.
https://www.electrive.com/2025/06/25/automotive-industry-launches-alliance-for-software-development/
https://redd.it/1mk2qj3
@r_linux
https://www.electrive.com/2025/06/25/automotive-industry-launches-alliance-for-software-development/
https://redd.it/1mk2qj3
@r_linux
electrive
Automotive industry launches alliance for software development
BMW, Mercedes-Benz, Volkswagen and other companies from the automotive industry have agreed on pre-competitive cooperation in software development on an open
EasyEffects: My Quest to Goldilock-Sound Stage. My Girlfriend Left Me, But it Was Worth It
https://redd.it/1mjz3b7
@r_linux
https://redd.it/1mjz3b7
@r_linux
Linux Text Editors You Should Know About
https://linuxblog.io/50-linux-text-editors/
https://redd.it/1mk0gfd
@r_linux
https://linuxblog.io/50-linux-text-editors/
https://redd.it/1mk0gfd
@r_linux
LinuxBlog.io
50 Linux Text Editors You Should Know About
So, I sat down today with a simple task: continue testing out these new Linux distros and install a text editor for quick tweaks. But as I sat down to
Ubuntu 24.04.3 LTS Released With Linux 6.14 HWE Kernel
https://www.phoronix.com/news/Ubuntu-24.04.3-LTS-Released
https://redd.it/1mk5gzf
@r_linux
https://www.phoronix.com/news/Ubuntu-24.04.3-LTS-Released
https://redd.it/1mk5gzf
@r_linux
Phoronix
Ubuntu 24.04.3 LTS Released With Linux 6.14 HWE Kernel
Canonical just announced the release of Ubuntu 24.04.3 LTS as the newest point release for this long-term support (LTS) operating system across desktop, server, and cloud.
I feel like I've wasted years, by not using Cockpit.
https://preview.redd.it/h9sbbxyi1phf1.png?width=1411&format=png&auto=webp&s=87c5cc6be95c5e2e2f9d9792031895dd70a9d525
I always knew it existed. But was fine with using yast to admin most things. It was simple, and preinstalled. Easy to use, and always available either in the terminal or the GUI. And for my remote servers I have an RMM I pay for.
I know Opensuse is set to sunset Yast. So I decided to check out cockpit. And wow, I had no idea I could do so much from one web based interface. Double nice since I'm switching from docker to podman.
https://redd.it/1mkhgi4
@r_linux
https://preview.redd.it/h9sbbxyi1phf1.png?width=1411&format=png&auto=webp&s=87c5cc6be95c5e2e2f9d9792031895dd70a9d525
I always knew it existed. But was fine with using yast to admin most things. It was simple, and preinstalled. Easy to use, and always available either in the terminal or the GUI. And for my remote servers I have an RMM I pay for.
I know Opensuse is set to sunset Yast. So I decided to check out cockpit. And wow, I had no idea I could do so much from one web based interface. Double nice since I'm switching from docker to podman.
https://redd.it/1mkhgi4
@r_linux
Zellij (A terminal workspace with batteries included) 0.43.0
https://github.com/zellij-org/zellij/releases/tag/v0.43.0
https://redd.it/1mko56t
@r_linux
https://github.com/zellij-org/zellij/releases/tag/v0.43.0
https://redd.it/1mko56t
@r_linux
GitHub
Release Release v0.43.0 · zellij-org/zellij
join the discussion: https://github.com/zellij-org/zellij/discussions/4340
Web Client
This release includes the long promised web-client, allowing Zellij users to start up a built-in web server in ...
Web Client
This release includes the long promised web-client, allowing Zellij users to start up a built-in web server in ...
Computer Science Education
Here's a comprehensive two year course
It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, as it is assumed most of the people following this curriculum are already educated outside the field of CS.
https://github.com/ossu/computer-science
https://redd.it/1mkf9ml
@r_linux
Here's a comprehensive two year course
It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, as it is assumed most of the people following this curriculum are already educated outside the field of CS.
https://github.com/ossu/computer-science
https://redd.it/1mkf9ml
@r_linux
GitHub
GitHub - ossu/computer-science: 🎓 Path to a free self-taught education in Computer Science!
🎓 Path to a free self-taught education in Computer Science! - ossu/computer-science
Distrosea
run different distros in your browser..........haven't had my time to check it out but will later after I work......give it a spin and post your experiences https://distrosea.com/
https://redd.it/1ml006b
@r_linux
run different distros in your browser..........haven't had my time to check it out but will later after I work......give it a spin and post your experiences https://distrosea.com/
https://redd.it/1ml006b
@r_linux
DistroSea
Test Linux distros online - DistroSea
Instantly test run Linux distros online in the cloud for free, right from your web browser. No installation or live boot required.
GNOME 49 Backlight Changes
https://blog.sebastianwick.net/posts/gnome-49-backlight-changes/
https://redd.it/1ml74gr
@r_linux
https://blog.sebastianwick.net/posts/gnome-49-backlight-changes/
https://redd.it/1ml74gr
@r_linux
swick's blog
GNOME 49 Backlight Changes
One of the things I’m working on at Red Hat is HDR support. HDR is inherently linked to luminance (brightness, but ignoring human perception) which makes it an important parameter for us that we would like to be in control of.
One reason is rather stupid.…
One reason is rather stupid.…
Intel CPU Temperature Monitoring Driver For Linux Now Unmaintained After Layoffs
https://www.phoronix.com/news/Linux-coretemp-Orphaned
https://redd.it/1ml8vuh
@r_linux
https://www.phoronix.com/news/Linux-coretemp-Orphaned
https://redd.it/1ml8vuh
@r_linux
Phoronix
Intel CPU Temperature Monitoring Driver For Linux Now Unmaintained After Layoffs
There is yet more apparent fallout from Intel's recent layoffs/restructurings as it impacts the Linux kernel..
Change kernels often? Natively booting via UEFI?
A while ago I gave up on grub and starting booting natively using UEFI and my BIOS. This has worked well, but I often change kernels and I needed a way to easily boot a different kernel by default. I used to do this by reviewing the entries from efibootmgr and manually updating them, but this was cumbersome and error prone. Well, not any more:
```
$ sudo Scripts/efibootset
Current EFI boot order
1) Boot0009 - Void Linux with kernel 6.15.9_1
2) Boot0008 - Void Linux with kernel 6.15.4_1 [Currently booted]
3) Boot0007 - Void Linux with kernel 6.12.41_1
4) Boot0002 - Void Linux with kernel 6.12.40_1
5) Boot0006 - Void Linux with kernel 6.15.7_1
6) Boot0000 - debian
7) Boot0001 - Linux-Firmware-Updater
Enter number to boot first or press Enter to use current:
Current
BootOrder: 0009,0008,0007,0002,0006,0000,0010,0011,0012,0013,0014,0015,0016,0017,0018,0019,001C,0020,001E,001F,0021,001D,0022,0023,0024,0025,0001
New
BootOrder: 0008,0009,0007,0002,0006,0000,0010,0011,0012,0013,0014,0015,0016,0017,0018,0019,001C,0020,001E,001F,0021,001D,0022,0023,0024,0025,0001
New EFI boot order
1) Boot0008 - Void Linux with kernel 6.15.4_1 [Currently booted]
2) Boot0009 - Void Linux with kernel 6.15.9_1
3) Boot0007 - Void Linux with kernel 6.12.41_1
4) Boot0002 - Void Linux with kernel 6.12.40_1
5) Boot0006 - Void Linux with kernel 6.15.7_1
6) Boot0000 - debian
7) Boot0001 - Linux-Firmware-Updater
```
Here is the code. While I'm a bit new to this, happy to take improvements and feedback.
Cheers.
```
#!/bin/bash
if ! command -v efibootmgr &> /dev/null; then
echo "This noscript requires efibootmgr; please install it and try again."
exit 1
fi
if (( $EUID != 0 )); then
echo "This noscript requires root."
exit 1
fi
while getopts d opt; do
case $opt in
d) set -x;;
esac
done
oIFS=$IFS
# Store efibootmgr output
efibootdata=$(efibootmgr)
# Parse efibootmgr output
parse() {
IFS='#'
i=0
while read -r order_label loader; do
# Get current boot entry
if [[ "X$order_label" = XBootCurrent* ]]; then
current="${order_label:13}"
fi
# Get boot order
if [[ "X$order_label" = XBootOrder* ]]; then
boot_order="${order_label:11}"
fi
# Grab the entries that are on the disk
# If the loader begins with a parenthesis, assume this is an entry we modified and process it
# Need to use double brackets here or this doesn't work
if [[ "X$loader" = X\(* ]]; then
order[$i]="${order_label:4:4}"
label[$i]="${order_label:10}"
((i++))
fi
# Replace all instances of HD with a hash as IFS can only work with single characters
done < <(echo $efibootdata | sed -e 's/HD/#/g')
}
# Display boot entries in order and store them
display() {
printf "\n%s\n\n" "$1 EFI boot order"
IFS=' ,'
n=1
# echo boot_order is $boot_order
for entry in $boot_order; do
# Find the matching entry
# This won't work as bash will not readily do the variable expansion first
# for e in {0..$i}; do
# If we don't note a space here, seq will use a new line and this will break
for e in $(seq -s ' ' 0 $i); do
# for (( e=$i; e>=0; e-- )); do
if [[ "X$entry" = X${order[$e]} ]]; then
# echo ${label[$e]}
if [[ "X$current" = X${order[$e]} ]]; then
printf "%2d) %s - %s\n" $n Boot${order[$e]} "${label[$e]}[Currently booted]"
# Update current to reflect number of currently booted
current=$n
else
# Need parentheses at the end as it could contain spaces
printf "%2d) %s - %s\n" $n Boot${order[$e]} "${label[$e]}"
fi
number_order[$n]=${order[$e]}
((n++))
break
fi
done
done
}
parse
display Current
# Insert blank line
echo
# Update boot entries
reorder() {
# Do nothing if the selected boot entry is the first entry
if [[ "X$1" = X1 ]]; then
printf "\n%s\n" "Selected boot entry is already the first entry; no changes made."
IFS=$oIFS
exit 0
fi
# Create new BootOrder
new_order=${number_order[$1]}
for i in $boot_order; do
if [[ "X$i" != X${number_order[$1]} ]]; then
new_order+=",$i"
fi
done
# Need to
A while ago I gave up on grub and starting booting natively using UEFI and my BIOS. This has worked well, but I often change kernels and I needed a way to easily boot a different kernel by default. I used to do this by reviewing the entries from efibootmgr and manually updating them, but this was cumbersome and error prone. Well, not any more:
```
$ sudo Scripts/efibootset
Current EFI boot order
1) Boot0009 - Void Linux with kernel 6.15.9_1
2) Boot0008 - Void Linux with kernel 6.15.4_1 [Currently booted]
3) Boot0007 - Void Linux with kernel 6.12.41_1
4) Boot0002 - Void Linux with kernel 6.12.40_1
5) Boot0006 - Void Linux with kernel 6.15.7_1
6) Boot0000 - debian
7) Boot0001 - Linux-Firmware-Updater
Enter number to boot first or press Enter to use current:
Current
BootOrder: 0009,0008,0007,0002,0006,0000,0010,0011,0012,0013,0014,0015,0016,0017,0018,0019,001C,0020,001E,001F,0021,001D,0022,0023,0024,0025,0001
New
BootOrder: 0008,0009,0007,0002,0006,0000,0010,0011,0012,0013,0014,0015,0016,0017,0018,0019,001C,0020,001E,001F,0021,001D,0022,0023,0024,0025,0001
New EFI boot order
1) Boot0008 - Void Linux with kernel 6.15.4_1 [Currently booted]
2) Boot0009 - Void Linux with kernel 6.15.9_1
3) Boot0007 - Void Linux with kernel 6.12.41_1
4) Boot0002 - Void Linux with kernel 6.12.40_1
5) Boot0006 - Void Linux with kernel 6.15.7_1
6) Boot0000 - debian
7) Boot0001 - Linux-Firmware-Updater
```
Here is the code. While I'm a bit new to this, happy to take improvements and feedback.
Cheers.
```
#!/bin/bash
if ! command -v efibootmgr &> /dev/null; then
echo "This noscript requires efibootmgr; please install it and try again."
exit 1
fi
if (( $EUID != 0 )); then
echo "This noscript requires root."
exit 1
fi
while getopts d opt; do
case $opt in
d) set -x;;
esac
done
oIFS=$IFS
# Store efibootmgr output
efibootdata=$(efibootmgr)
# Parse efibootmgr output
parse() {
IFS='#'
i=0
while read -r order_label loader; do
# Get current boot entry
if [[ "X$order_label" = XBootCurrent* ]]; then
current="${order_label:13}"
fi
# Get boot order
if [[ "X$order_label" = XBootOrder* ]]; then
boot_order="${order_label:11}"
fi
# Grab the entries that are on the disk
# If the loader begins with a parenthesis, assume this is an entry we modified and process it
# Need to use double brackets here or this doesn't work
if [[ "X$loader" = X\(* ]]; then
order[$i]="${order_label:4:4}"
label[$i]="${order_label:10}"
((i++))
fi
# Replace all instances of HD with a hash as IFS can only work with single characters
done < <(echo $efibootdata | sed -e 's/HD/#/g')
}
# Display boot entries in order and store them
display() {
printf "\n%s\n\n" "$1 EFI boot order"
IFS=' ,'
n=1
# echo boot_order is $boot_order
for entry in $boot_order; do
# Find the matching entry
# This won't work as bash will not readily do the variable expansion first
# for e in {0..$i}; do
# If we don't note a space here, seq will use a new line and this will break
for e in $(seq -s ' ' 0 $i); do
# for (( e=$i; e>=0; e-- )); do
if [[ "X$entry" = X${order[$e]} ]]; then
# echo ${label[$e]}
if [[ "X$current" = X${order[$e]} ]]; then
printf "%2d) %s - %s\n" $n Boot${order[$e]} "${label[$e]}[Currently booted]"
# Update current to reflect number of currently booted
current=$n
else
# Need parentheses at the end as it could contain spaces
printf "%2d) %s - %s\n" $n Boot${order[$e]} "${label[$e]}"
fi
number_order[$n]=${order[$e]}
((n++))
break
fi
done
done
}
parse
display Current
# Insert blank line
echo
# Update boot entries
reorder() {
# Do nothing if the selected boot entry is the first entry
if [[ "X$1" = X1 ]]; then
printf "\n%s\n" "Selected boot entry is already the first entry; no changes made."
IFS=$oIFS
exit 0
fi
# Create new BootOrder
new_order=${number_order[$1]}
for i in $boot_order; do
if [[ "X$i" != X${number_order[$1]} ]]; then
new_order+=",$i"
fi
done
# Need to
restore this so BootOrder can have commas
IFS=$oIFS
printf "\n%s\n%s\n" "Current" "BootOrder: $boot_order"
printf "\n%s\n%s\n" "New" "BootOrder: $new_order"
# Update boot
efibootdata=$(efibootmgr -o $new_order)
parse
display New
}
# Check for valid boot entry
entry_exists() {
if (( $1 >= 1 && $1 <= $n-1 )); then
# Return true
return 0
else
# Return false
return 1
fi
}
# Get boot entry
select_entry() {
# When this is used with command substitution we never see it
# printf "\n%s" "Enter number to boot first or press Enter to use current: "
read -p "Enter number to boot first or press Enter to use current: " s
case $s in
# Enter pressed
"")
echo $current
;;
# Single digit
[1-9])
if entry_exists $s; then
echo $s
else
echo 0
fi
;;
# Double digits
[1-9][0-9])
if entry_exists $s; then
echo $s
else
echo 0
fi
;;
*)
echo 0
;;
esac
}
# Get new selection if invalid and update boot order if valid
verify() {
case $1 in
0)
printf "\n%s\n" "Invalid selection"
verify $(select_entry)
;;
*)
# Update boot entries
reorder $1
;;
esac
}
verify $(select_entry)
IFS=$oIFS
```
https://redd.it/1mlatzv
@r_linux
IFS=$oIFS
printf "\n%s\n%s\n" "Current" "BootOrder: $boot_order"
printf "\n%s\n%s\n" "New" "BootOrder: $new_order"
# Update boot
efibootdata=$(efibootmgr -o $new_order)
parse
display New
}
# Check for valid boot entry
entry_exists() {
if (( $1 >= 1 && $1 <= $n-1 )); then
# Return true
return 0
else
# Return false
return 1
fi
}
# Get boot entry
select_entry() {
# When this is used with command substitution we never see it
# printf "\n%s" "Enter number to boot first or press Enter to use current: "
read -p "Enter number to boot first or press Enter to use current: " s
case $s in
# Enter pressed
"")
echo $current
;;
# Single digit
[1-9])
if entry_exists $s; then
echo $s
else
echo 0
fi
;;
# Double digits
[1-9][0-9])
if entry_exists $s; then
echo $s
else
echo 0
fi
;;
*)
echo 0
;;
esac
}
# Get new selection if invalid and update boot order if valid
verify() {
case $1 in
0)
printf "\n%s\n" "Invalid selection"
verify $(select_entry)
;;
*)
# Update boot entries
reorder $1
;;
esac
}
verify $(select_entry)
IFS=$oIFS
```
https://redd.it/1mlatzv
@r_linux
Reddit
From the linux community on Reddit
Explore this post and more from the linux community
sshPilot 2.0 released with tunelling support and more
Main window
sshPilot is a desktop application for managing SSH connections. It loads/saves standard .ssh/config entries and make it easy to manage multiple servers.
It fully supports dynamic, remote and local port forwarding, key-pair generation, file transfer to remote machines and more.
Fetures:
- Load/save standard .ssh/config entries (it loads you current configuration)
- Tabbed interface
- Full support for Local, Remote and Dynamic port forwarding
- Intuitive, minimal UI with keyboard navigation and shortcuts: Press ctrl+L to quickly switch between hosts, close tabs with ctrl+w and move between tabs with alt+right/left arrow
- SCP support for quickly uploading a file to remote server
- Generate keypairs and add them to remote servers
- Toggle to show/hide ip addresses/hostnames in main UI
- Light/Dark themes
- Customizable terminal font and color schemes
- Free software (GPL v3 license)
The app is currently distributed as a debian package and can be installed on recent versions of Debian (testing/unstable) and ubuntu. Debian bookworm is not supported due to older libadwaita version.
Latest release can be downloaded from here: https://github.com/mfat/sshpilot/releases/
You can also run the app from source. Install the modules listed in requirements.txt and a fairly recent version of GNOME and it should run.
A Flatpak and an RPM version are also planned for future.
I'm also looking for a volunteer to design a good icon for the app.
I'd highly appreciate your thoughts/feedback on this.
https://redd.it/1ml9qpf
@r_linux
Main window
sshPilot is a desktop application for managing SSH connections. It loads/saves standard .ssh/config entries and make it easy to manage multiple servers.
It fully supports dynamic, remote and local port forwarding, key-pair generation, file transfer to remote machines and more.
Fetures:
- Load/save standard .ssh/config entries (it loads you current configuration)
- Tabbed interface
- Full support for Local, Remote and Dynamic port forwarding
- Intuitive, minimal UI with keyboard navigation and shortcuts: Press ctrl+L to quickly switch between hosts, close tabs with ctrl+w and move between tabs with alt+right/left arrow
- SCP support for quickly uploading a file to remote server
- Generate keypairs and add them to remote servers
- Toggle to show/hide ip addresses/hostnames in main UI
- Light/Dark themes
- Customizable terminal font and color schemes
- Free software (GPL v3 license)
The app is currently distributed as a debian package and can be installed on recent versions of Debian (testing/unstable) and ubuntu. Debian bookworm is not supported due to older libadwaita version.
Latest release can be downloaded from here: https://github.com/mfat/sshpilot/releases/
You can also run the app from source. Install the modules listed in requirements.txt and a fairly recent version of GNOME and it should run.
A Flatpak and an RPM version are also planned for future.
I'm also looking for a volunteer to design a good icon for the app.
I'd highly appreciate your thoughts/feedback on this.
https://redd.it/1ml9qpf
@r_linux