Linux - Reddit – Telegram
Linux - Reddit
763 subscribers
4.19K photos
207 videos
39.9K links
Stay up-to-date with everything Linux!
Content directly fetched from the subreddit just for you.

Powered by : @r_channels
Download Telegram
Tux has fallen on hard times
https://redd.it/1mjw0oe
@r_linux
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
PULS - A Modern Terminal System Monitor
https://redd.it/1mjy0lp
@r_linux
FFmpeg is switching development from mailing list to Git forge "Forgejo"
https://code.ffmpeg.org/FFmpeg/FFmpeg

https://redd.it/1mjzl4e
@r_linux
Bring compiz fusion back!
https://redd.it/1mk18sw
@r_linux
EasyEffects: My Quest to Goldilock-Sound Stage. My Girlfriend Left Me, But it Was Worth It
https://redd.it/1mjz3b7
@r_linux
Look at the ring I had made for me
https://redd.it/1mkf3tk
@r_linux
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
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
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
Thanks linux for your installation process.
https://redd.it/1ml6qvq
@r_linux
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
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