A quick Linux shell tip on chaining commands on a single line. Using apt update && apt upgrade -y as the example, I explain how the double ampersand runs the second command only if the first succeeds, and briefly mention semicolons and double pipes for unconditional or failure-only execution...
I experiment with lightweight Linux distros on an old HP Mini 110 netbook, motivated by wanting a low-cost machine for accessing Proxmox VMs outside the web GUI. I try three distros, antiX, Lubuntu, and Mint Xfce, with the main stumbling block being Broadcom wifi drivers: antiX runs the fastest but I never get wireless working on it, while Lubuntu and Mint both work once I install proprietary drivers over Ethernet. Mint Xfce ends up as the working option, despite its 32-bit version nearing end of life...
I give a short walkthrough of backing up a Synology NAS to a USB drive with rsync, using excludes to skip junk files like macOS’s .DS_Store and Synology’s @eaDir. I also show how to use the find command to recursively locate .DS_Store files scattered through subdirectories, preview the matches first, and delete them with the -delete flag...
Proxmox saves VM backups to local storage by default, which is no help if the host dies and makes restoring to a different node awkward. My walkthrough covers creating a shared folder with NFS permissions on a Synology NAS, then adding that share as storage at the datacenter level in Proxmox so backups and restores can happen from any node, making it easy to move VMs between hosts...
My attempt to rsync a NAS movies directory to an NTFS-formatted USB drive fails with “Operation not permitted” errors on setting times and creating temporary files, even though a manual cp by the same user succeeds. Running rsync with sudo makes the copies work, though owner and permission attributes still get rewritten on every run, possibly because of the NTFS format. I consider the sudo workaround unsatisfactory given my plans to eventually automate the backup...
I describe setting up a 3-2-1 backup strategy with a local RAID6 NAS, an off-site NAS, and an offline USB drive, and moving away from manually syncing files between them. The post walks through using rsync to sync directories, covering how it copies only changed files, propagates deletions with the –del flag, and works across remote hosts over SSH, with a brief mention of Beyond Compare for manual comparisons...
After migrating a media library from an external USB drive to a NAS and reorganising it, I needed a way to verify no files were missed in the move. I walk through building a Linux command-line pipeline using find, grep with regex, and cut to recursively list media files while filtering out directories, metadata, and unwanted filenames. I then feed the resulting clean listing into a spreadsheet for comparison against the original drive...
In my homelab troubleshooting saga, Linux file permissions repeatedly foil my attempts to get Jellyfin working — first in an LXC container on Proxmox, then in a Debian VM, and finally via the official container version. Along the way Tailscale proves incompatible with the container, metadata posters vanish unexpectedly, and I conclude that on Linux, permission issues should be the first suspect whenever something breaks...
I move Jellyfin from a Proxmox LXC container to a VM because Tailscale wouldn’t run in the container, but the fstab entry mounting a NAS media share over CIFS no longer mounts at boot, even though mount -a works. The cause is the network not being up when the mount is attempted, and the fix is adding noauto, x-systemd.automount, and _netdev to the mount options so systemd waits for the network and mounts on demand...
After adding my user to the sudo group, which worked on Ubuntu, I tried the same approach on a fresh Debian install and found it didn’t take. Despite the sudoers file and group membership looking correct, the fix turned out to be simply logging out and back in for the change to take effect...
After mounting a network share on a Linux Jellyfin server, I find Jellyfin can’t add the media path as a library even though root can access it. Using ls, ps, and getent, I trace the problem to a group mismatch: the share was mounted with gid=1000, but the Jellyfin process runs as user jellyfin in group 115. Remounting the share with the correct gid resolves the issue...
A walkthrough of how I manually mount and unmount USB drives on Linux systems that don’t auto-mount them, such as servers. Using a Proxmox host as an example, I show how to identify a plugged-in drive with lsblk, mount a partition to a directory under /media, and safely unmount it with umount before removal...
When a rebuilt or cloned virtual machine reuses the IP address of a previously connected host, SSH rejects the connection with a “remote host identification has changed” warning. I explain why SSH behaves this way and show how to remove the stale entry from the known_hosts file using ssh-keygen -R so the host can be connected to again...
I take a look at why leaving SSH password authentication enabled is risky, and why key-based auth with passwords disabled is a sensible setup for any internet-facing server. While reviewing server logs, I noticed sshd timeouts and suspicious kex_exchange_identification messages, and traced the IP address to a host in China flagged by others for brute force attacks...
After trying to run a docker command on a new home server and hitting the “user is not in the sudoers file” error, I look up the incident report in the journalctl logs, then explain how to properly gain sudo access. Instead of hand-editing /etc/sudoers, I add my user to the sudo group with usermod, covering why visudo exists and why I prefer sudo over logging in as root...