Sign in

iiinova is part of the Atmosphere — an open, public network where you own your identity.

LXer

@lxer.mas.to.ap.brid.gy
62 followers 0 following 1.7K posts

Software is like fish: it's better when it's free. [bridged from mas.to/@lxer on the fediverse by fed.brid.gy ]

PostsRepliesMedia
LXer @lxer.mas.to.ap.brid.gy · 1h
9to5Linux Weekly Roundup: October 18th, 2026 9to5linux.com/9to5linux-weekly-roun… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 5h
GNOME 51.1 Improves Drag and Drop Between Wayland and Xwayland Clients 9to5linux.com/gnome-51-1-improves-d… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 22h
GNOME 50.6 Desktop Environment Released with Fixes for Nautilus, GNOME Shell 9to5linux.com/gnome-50-6-desktop-en… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 17/10/2026
PeaZip 11.4 Open-Source Archive Manager Released with Various Improvements 9to5linux.com/peazip-11-4-open-sour… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 17/10/2026
Ubuntu Touch OTA 2.1 Rolls Out with Support for Volla Tablet, Various Updates 9to5linux.com/ubuntu-touch-ota-2-1-… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 16/10/2026
KDE Plasma 6.8 Marks 30 Years With a Major Shift to Wayland and a More Powerful Linux Desktop www.linuxjournal.com/content/kde-pl… #linuxnews #linuxjournal #opensource
linuxjournal.com
KDE Plasma 6.8 Marks 30 Years With a Major Shift to Wayland and a More Powerful Linux Desktop | Linux Journal
010 1
LXer @lxer.mas.to.ap.brid.gy · 16/10/2026
GNOME OS Preview Launches for the General Public with GNOME 51 9to5linux.com/gnome-os-preview-laun… #9to5linux #linux
9to5linux.com
GNOME OS Preview Launches for the General Public with GNOME 51
GNOME OS Preview has been released today as a new edition of the GNOME OS distribution featuring the latest and greatest GNOME desktop environment. The post GNOME OS Preview Launches for the General Public with GNOME 51 appeared first on 9to5Linux - do not reproduce this article without permission. This RSS feed is intended for readers, not scrapers.
000 0
LXer @lxer.mas.to.ap.brid.gy · 16/10/2026
First Look at Devario OS: A Modern, Shelly-First Linux Distro Based on Arch Linux 9to5linux.com/first-look-at-devario… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 16/10/2026
KDE Plasma 6.6.7 Is Out with Support for Monitoring GPU Usage for Intel A380 GPUs 9to5linux.com/kde-plasma-6-6-7-is-o… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 16/10/2026
Shelly 3.1.7 GUI Package Manager for Arch Linux Adds RLPM Native Package Engine 9to5linux.com/shelly-3-1-7-gui-pack… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 15/10/2026
Is Linus Torvalds Vibe Coding? www.linux-magazine.com/Online/News/… #linux #magazin #itprofessionell
linux-magazine.com
Is Linus Torvalds Vibe Coding? » Linux Magazine
The creator of Linux has added AI into his process for Linux kernel development, and it's more than just for debugging.
000 0
LXer @lxer.mas.to.ap.brid.gy · 15/10/2026
Ubuntu 26.10 Official Flavors Are Now Available for Download, This Is What’s New 9to5linux.com/ubuntu-26-10-official… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 15/10/2026
Ubuntu 26.10 (Stonking Stingray) Is Now Available for Download, Here’s What’s New 9to5linux.com/ubuntu-26-10-stonking… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 15/10/2026
Libreboot 26.10 Open-Source BIOS/UEFI Firmware Released with Full UEFI Support 9to5linux.com/libreboot-26-10-open-… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 15/10/2026
5 Git and GitHub CLI Tips to Work Faster on Linux Servers Read more here www.tecmint.com/git-github-cli-tips #linux #opensource #tecmint
tecmint.com
5 Git and GitHub CLI Tips to Work Faster on Linux Servers
Long Git commands, failed pulls, and repeated GitHub token prompts slow down every deploy you run over SSH. Here are five ways to streamline Git configuration, repository maintenance, and GitHub CLI authentication. If you manage applications on **Linux** servers, you probably pull code over SSH several times a day. Each operation takes only a few seconds, but the friction adds up when every git log requires multiple flags, git pull stops to ask how to reconcile divergent branches, and GitHub pushes repeatedly prompt for authentication. Most of these interruptions come from **Git** and **GitHub CLI** defaults that do not match your workflow. A few one-time configuration changes can simplify common commands, make pull behavior predictable, keep repositories maintained, and reduce repeated authentication prompts. Both **Git** and the **GitHub CLI (gh)** support persistent settings, allowing you to apply these improvements without changing your deployment scripts or configuring every command from scratch. ## How git config and gh config Store Your Settings Before changing anything, it helps to understand where **Git** stores its settings. Git uses three configuration levels, with more specific settings overriding broader ones: /etc/gitconfig # --system: every user on the server ~/.gitconfig # --global: your user, every repository /.git/config # --local: one repository only The examples below use git config `--global`, so the settings apply to every repository managed by your current **Linux** user, including tecmint. Repository-specific settings can still override them. The **GitHub CLI (gh)** stores its preferences in `~/.config/gh/config.yml` and its authentication information in `~/.config/gh/hosts.yml`. These files serve different purposes: the configuration file controls CLI behavior, while the hosts file stores authentication data for GitHub accounts and hosts. ## Install Git and the GitHub CLI on Linux Git is already installed on many **Linux** servers, but the `GitHub CLI (gh)` may be missing. Install both on the example server, `192.168.122.248`, using the commands for your Linux distribution. On **Ubuntu** and **Debian** , install the packages from the configured APT repositories. The available **gh** version may lag behind the latest upstream release. sudo apt update sudo apt install -y git gh On **Rocky Linux** , **AlmaLinux** , and **RHEL** , **Git** is available through the standard repositories, but the GitHub CLI may require its official RPM repository. Add the repository and install gh as follows: sudo dnf install -y git 'dnf-command(config-manager)' sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo sudo dnf install -y gh --repo gh-cli Verify the installed versions before proceeding: git --version gh --version The examples below assume **Git 2.34** or newer, which introduced background maintenance scheduling through systemd timers on **Linux**. Some commands and options may behave differently with older releases, so check your installed version before applying the configuration. ## 1. Shorten Daily Git Commands with Aliases The first improvement is to reduce repetitive typing. Git aliases let you assign short names to frequently used commands and their options, making everyday repository checks faster. Configure these three aliases globally: git config --global alias.st 'status -sb' git config --global alias.lg 'log --oneline --graph --decorate -15' git config --global alias.last 'log -1 --stat' Here is what each alias does: * `st` runs git status -sb, showing the current branch and a compact summary of staged, unstaged, and untracked changes. When upstream tracking is configured, it also shows whether the branch is ahead of or behind its upstream. * `lg` displays the last 15 commits in a compact graph, with abbreviated commit IDs, decorations such as branch names and tags, and one-line commit messages. * `last` shows the most recent commit and a summary of the files it changed, including insertion and deletion counts. For example, run these commands from your application directory: cd /var/www/app git st git lg git last You can now check the working tree, inspect recent history, and review the latest commit without repeatedly typing long command options. Because these aliases use `–global`, they are available in every repository accessed by your current Linux user. ## 2. Prevent Accidental Merge Commits with pull.ff Aliases save keystrokes, but a more disruptive problem is a **git pull** that stops a deployment with the error **fatal: Need to specify how to reconcile divergent branches.** Modern Git displays this message when local and remote branches have diverged and no pull strategy has been configured. On a deployment checkout, you may want Git to accept only fast-forward updates and stop if the local branch contains commits that are missing from the remote. Configure that behavior globally: git config --global pull.ff only git config --global fetch.prune true These settings solve two different problems: * **pull.ff** only allows git pull to update the current branch only when Git can fast-forward it. If local and remote histories have diverged, Git aborts with `fatal: Not possible to fast-forward, aborting.` rather than creating a merge commit. * **fetch.prune true** removes stale remote-tracking references when you fetch. If a branch has been deleted on GitHub, its outdated tracking reference is removed, keeping the output of `git branch -r` tidy. If a pull fails because Git cannot fast-forward, inspect the recent history before changing anything: git lg git status -sb If the server contains an unexpected local commit, determine whether it should be pushed, preserved on another branch, or discarded. Do not reset or discard it blindly, especially on a production server. **Important** : These settings are appropriate when your deployment workflow expects the server to follow the remote branch without local commits. They do not guarantee that the remote branch is the exact version you intended to deploy; verify the target branch and commit as part of your deployment process. If this explains why `git pull` keeps failing during deployments, share the tip with a teammate who still has to clean up unexpected merge commits on production servers. ## 3. Keep Large Repositories Fast with git maintenance start The first two hacks speed up your commands, while this one speeds up Git itself. Frequently pulled repositories collect loose objects and pack files, so Git slows down over months, and an automatic `git gc` can start in the middle of a deploy. The git maintenance command moves that housekeeping into scheduled background jobs, so register the repository from inside its directory: cd /var/www/app git maintenance start This adds the repository to `maintenance.repo` in your global config and creates hourly, daily, and weekly systemd user timers (or cron jobs when systemd user services aren’t available), which you can list: systemctl --user list-timers 'git-maintenance@*' You should see the hourly, daily, and weekly git-maintenance@ timers listed, with next-run times that differ on your server. User timers only run while you have an active login session, so enable lingering for your user to keep the jobs running after you log out: sudo loginctl enable-linger tecmint ## 4. Stop GitHub Token Prompts with gh auth setup-git With Git itself tuned, the remaining delay comes from GitHub authentication. GitHub no longer accepts account passwords over HTTPS, so every push asks for a personal access token, while the GitHub CLI can log in once and hand that token to Git whenever it asks. Start the login from the server: gh auth login Choose **GitHub.com** , **HTTPS** , and **Login with a web browser** , then enter the one-time code that `GitHub CLI (gh)` will display a one-time device code and ask you to open `https://github.com/login/device` on your own computer, enter the code there and authorize the request. This method works on headless Linux servers because the browser-based authorization happens on your local computer. gh auth setup-git You can check what this changed in your global Git config: git config --global --get-regexp 'credential.*' Output: credential.https://github.com.helper credential.https://github.com.helper !/usr/bin/gh auth git-credential credential.https://gist.github.com.helper credential.https://gist.github.com.helper !/usr/bin/gh auth git-credential The empty helper lines look like a mistake, but they are normal because they clear any credential helper defined earlier so Git asks only gh for GitHub credentials. If you were still pasting personal access tokens into every server, share this with someone who keeps a token in a text file in their home directory. ## 5. Configure GitHub CLI Settings with gh config Now that `GitHub CLI (gh)` is logged in, tune it the way you tuned Git in the first hack, since its interactive questions leave cron jobs waiting for input that never comes: gh config set git_protocol https gh config set prompt disabled gh alias set myprs 'pr list --author "@me"' gh alias set ci 'run list --limit 5' Here is what each setting and alias does: * `git_protocol https` keeps `gh repo clone` on HTTPS, so clones use the credential helper from the previous hack. * `prompt disabled` stops `gh` from asking interactive questions, so a command missing a required flag fails with an error instead of waiting inside a script. * `myprs` lists open pull requests you created in the current repository. * `ci` shows the last five GitHub Actions runs, so you can confirm a build passed before you pull. ## Pro Tips: Review and Secure Your Git and gh Config With all five hacks in place, run `git config --list --show-origin` whenever something behaves unexpectedly, because it shows every active setting next to the file it came from. To reuse this setup, copy `~/.gitconfig` and `~/.config/gh/config.yml` to other servers with `scp`, but never `hosts.yml`, since on a server without a keyring gh stores your token there in plain text. On shared servers, avoid your personal GitHub account and use a fine-grained token passed with `gh auth login --with-token`, limited to the repositories that server deploys, so a compromised server exposes as little as possible. If the plain-text token warning surprised you, share this with your team before someone copies their whole `~/.config/gh` directory between servers. ##### Conclusion You now have shorter Git commands, pulls that never create surprise merge commits, background repository maintenance, and GitHub logins that no longer interrupt your work. Each change took one command, and together they remove most of the waiting from Git work on a server. To wrap these commands into a deploy script that pulls, checks CI, and restarts your service, our Bash Scripting for Beginners course covers variables, error handling, and exit codes. We’d love to hear how you’ve set up Git on your servers. Which aliases do you rely on most, and do you allow gh logins on shared servers or stick to deploy keys? Feel free to post any errors in the comments.
010 1
LXer @lxer.mas.to.ap.brid.gy · 14/10/2026
Mesa 26.2.5 Is Out with Bug Fixes for RADV, NVK, ANV, PanVK, Freedreno, and Zink 9to5linux.com/mesa-26-2-5-is-out-wi… #9to5linux #linux
9to5linux.com
Mesa 26.2.5 Is Out with Bug Fixes for RADV, NVK, ANV, PanVK, Freedreno, and Zink
Mesa 26.2.5 is now available as the fifth bugfix update to the latest Mesa 26.2 stable series, bringing various improvements to the NVK, Freedreno, RADV, RadeonSI, Zink, ANV, PVR, and PanVK drivers. The post Mesa 26.2.5 Is Out with Bug Fixes for RADV, NVK, ANV, PanVK, Freedreno, and Zink appeared first on 9to5Linux - do not reproduce this article without permission. This RSS feed is intended for readers, not scrapers.
000 0
LXer @lxer.mas.to.ap.brid.gy · 14/10/2026
Building a Reliable Event-Driven Payment Service With XRP Ledger www.linuxjournal.com/content/buildi… #linuxnews #linuxjournal #opensource
linuxjournal.com
Building a Reliable Event-Driven Payment Service With XRP Ledger | Linux Journal
110 1
LXer @lxer.mas.to.ap.brid.gy · 14/10/2026
IPFire 2.29 Core Update 204 Linux Firewall Distro Improves the Knot Resolver 9to5linux.com/ipfire-2-29-core-upda… #9to5linux #linux
9to5linux.com
IPFire 2.29 Core Update 204 Linux Firewall Distro Improves the Knot Resolver
IPFire 2.29 Core Update 204 hardened Linux firewall distro is now available for download with improvements to the Knot Resolver, Intrusion Prevention System, WireGuard support, and more. The post IPFire 2.29 Core Update 204 Linux Firewall Distro Improves the Knot Resolver appeared first on 9to5Linux - do not reproduce this article without permission. This RSS feed is intended for readers, not scrapers.
000 0
LXer @lxer.mas.to.ap.brid.gy · 14/10/2026
KDE Plasma 6.8 Desktop Environment Officially Released, Here’s What’s New 9to5linux.com/kde-plasma-6-8-deskto… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 14/10/2026
Happy 30th Birthday, KDE! 9to5linux.com/happy-30th-birthday-k… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 14/10/2026
7 Tips to Optimize Linux systemd Boot Time Read more here www.tecmint.com/speed-up-systemd-bo… #linux #opensource #tecmint
tecmint.com
7 Tips to Optimize Linux systemd Boot Time
A Linux server that takes a minute to boot may be spending much of that time waiting for one or two systemd units. Here’s how to identify the delays with systemd-analyze and fix common causes involving wait-online, /etc/fstab, and unit dependencies. Imagine rebooting a server after a kernel update, only to find that SSH remains unavailable for over a minute. The hardware may be fine. A network interface that never becomes ready, a disk that times out, or a service waiting on another unit can delay the boot process. `systemd` tracks unit startup activity, while `systemd-analyze` helps you inspect boot timing and identify potential bottlenecks. The commands in this guide apply to most of the linux distributions and configuration paths can vary by distribution. ## How systemd Unit Dependencies Work Understanding how `systemd` schedules units makes boot-delay troubleshooting easier. `systemd` starts independent units in parallel and uses dependencies and ordering rules to determine which units must wait for others. Two pairs of directives control much of this behavior: * `Wants=` and `Requires=` define dependencies.` Wants=` pulls another unit into the transaction without making its success mandatory and while `Requires=` establishes a stronger dependency, although its exact failure and stop behavior also depends on the ordering relationship and other unit settings. * `After=` and `Before=` define startup order only, and they do not pull another unit into the transaction or start it by themselves. For example, `After=network-online.target` means a unit starts after that target if both are part of the transaction. On a typical **Linux** server, `multi-user.target` is the default target. Units that must start before the system reaches this target can contribute to boot delays. The critical chain shows the longest relevant sequence of ordered unit activations, helping you identify where to investigate first. ## 1. Check Boot Time with systemd-analyze Start by measuring boot time to establish a baseline. You can compare this result with later measurements to see whether your changes actually improve startup: systemd-analyze time Example output: Startup finished in 1.912s (kernel) + 2.877s (initrd) + 34.118s (userspace) = 38.907s multi-user.target reached after 34.090s in userspace. In this example, the system took approximately 39 seconds to boot, with most of the reported time spent in userspace. This is where systemd starts services, mounts filesystems, and brings up other system components. Your timings will vary by hardware, distribution, and configuration. ## 2. Find Slow Units with systemd-analyze blame Once you have the baseline, identify units that spend the longest time activating. The blame command sorts units by activation time, placing the longest-running entries first: systemd-analyze blame | head -n 4 Example output: 30.061s systemd-networkd-wait-online.service 4.882s snapd.seeded.service 1.912s snapd.service 1.204s cloud-init-local.service In this example, `systemd-networkd-wait-online.service` is the first unit to investigate because it spent about `30` seconds activating. However, do not assume the slowest unit is necessarily delaying boot by that entire amount. Units can start concurrently, and some may continue activating without blocking the default target. Use `systemd-analyze blame` to identify suspects, then inspect the critical chain and unit logs to determine whether a particular service is actually holding up startup. ## 3. Find Boot Bottlenecks with critical-chain To identify which units actually delayed the default target, use `critical-chain`. It shows the relevant dependency chain, with the activation time after `@` and the unit’s startup duration after `+`: systemd-analyze critical-chain Output (header lines trimmed): multi-user.target @34.090s └─nginx.service @33.851s +231ms └─network-online.target @33.842s └─systemd-networkd-wait-online.service @3.779s +30.061s └─systemd-networkd.service @3.551s +215ms **Nginx** is ordered after `network-online.target`, which waited `30` seconds for the `wait-online service`, while `snapd` never appears in the chain. If this helped you see the difference between a slow unit and one that delays boot, share it with someone who still disables services straight from the blame list. ## 4. Mask Unneeded Services with systemctl Before tuning boot delays, disable services the server does not need. List enabled service units and check for software or hardware the machine never uses: systemctl list-unit-files --type=service --state=enabled For example, a virtual server without a mobile broadband modem may not need `ModemManager`. If nothing depends on it, stop the service and disable it at boot: sudo systemctl disable --now ModemManager.service Disabling removes the service’s boot-time enablement, but another unit or a D-Bus request may still start it. To prevent normal activation, mask the service: sudo systemctl mask ModemManager.service Output: Created symlink '/etc/systemd/system/ModemManager.service' → '/dev/null'. Masking is stronger than disabling because `systemd` cannot start the unit through normal means while the mask remains in place. To reverse it, `unmask` the service: sudo systemctl unmask ModemManager.service **Be careful** : Do not blindly disable or mask systemd-*, storage, or networking services. Some are essential for booting, mounting filesystems, and maintaining remote access. Verify each service’s purpose and dependencies before changing it. ## 5. Fix systemd-networkd-wait-online Delays On **Ubuntu** Server, `systemd-networkd-wait-online` can delay boot when a managed interface never reaches the required online state. For example, an unplugged secondary NIC may hold up `network-online.target` until the configured timeout expires, while the console displays a message such as **“A start job is running for Wait for Network to be Configured”.** Do not disable the wait service blindly if Nginx or another application depends on `network-online.target`. First, inspect its current configuration and executable path: systemctl cat systemd-networkd-wait-online.service Check your network interfaces to identify the one that must be online: ip -br link If the installed systemd version supports the required interface-specific behavior, create a drop-in override: sudo systemctl edit systemd-networkd-wait-online.service Add the following configuration, replacing **enp1s0** with your actual interface and adjusting the timeout to suit your environment: # /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf [Service] ExecStart= ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --interface=enp1s0 --timeout=20 Save the file and exit the editor. * `ExecStart=` clears the original command so systemd uses the replacement. * `--interface=enp1s0` specifies the interface whose online state matters. Verify the option’s behavior for your installed systemd version. * `--timeout=20` limits the wait to 20 seconds. Reload systemd’s configuration and restart the service to apply the override for subsequent starts: sudo systemctl daemon-reload Reboot during a suitable maintenance window and compare the results: systemd-analyze critical-chain network-online.target On **Rocky Linux** , **AlmaLinux** , and **RHEL** , `NetworkManager` commonly handles network configuration. If `NetworkManager-wait-online.service` is delaying boot, inspect the connection profile and identify why it is waiting, such as a DHCP response that never arrives, before changing the configuration. If an unplugged network card ever added two minutes to your boot, share this with a teammate who reboots servers during maintenance windows. ## 6. Fix Slow fstab Mounts with nofail Missing disks and unreachable network shares can delay boot when systemd waits for their mount units. Use nofail for optional disks and x-systemd.automount to defer mounting network shares until they are accessed. Open `/etc/fstab` on **Ubuntu** or **Debian** : sudo nano /etc/fstab On **Rocky Linux** , **AlmaLinux** , and **RHEL** , minimal installs ship `vi` instead: sudo vi /etc/fstab For example, configure an optional data disk and an NFS backup share as follows: # /etc/fstab UUID=3f1c2a7e-8b4d-4e2a-9c61-5d7f0b9e2a14 /data ext4 defaults,nofail,x-systemd.device-timeout=10s 0 2 192.168.122.250:/srv/backups /mnt/backups nfs defaults,_netdev,x-systemd.automount 0 0 Replace the example UUID with the value reported by blkid and the NFS address with your server’s address. These options control how systemd handles the mounts: * **nofail** allows boot to continue if the optional disk cannot be mounted. * **x-systemd.device-timeout=10s** limits how long systemd waits for the device to appear. It does not limit the time required to mount the filesystem itself. * **_netdev** identifies the mount as network-dependent. * **x-systemd.automount** creates an automount unit that triggers the actual mount when the path is accessed, rather than mounting the share immediately during boot. Validate the edited file and reload systemd’s unit configuration: sudo findmnt --verify sudo systemctl daemon-reload Check the generated units: systemctl status data.mount systemctl status mnt-backups.automount Unit names are derived from their mount paths, so `/data` becomes `data.mount` and `/mnt/backups` becomes `mnt-backups.automount`. Fix any validation errors before proceeding. On a suitable test system, verify that the optional disk can be absent without blocking boot and that the NFS share mounts successfully when `/mnt/backups` is accessed. \ **Remember** that startup services that access the share can still trigger the NFS mount and encounter network delays. ## 7. Use Wants= Instead of Requires= Systemd dependency mistakes can delay boot or cause services to stop unexpectedly. For example, an application that only listens on a local socket does not necessarily need to wait for `network-online.target`. Likewise, `Requires=` creates a stronger dependency than `Wants=`, but neither directive replaces proper service readiness handling. Create a unit file with nano on **Ubuntu** and **Debian** : sudo nano /etc/systemd/system/myapp.service On **Rocky Linux** , **AlmaLinux** , and **RHEL** , use `vi`: sudo vi /etc/systemd/system/myapp.service Add the following configuration, replacing the executable path and service account with your own values: # /etc/systemd/system/myapp.service [Unit] Description=Internal API for tecmint.lan Wants=postgresql.service After=network.target postgresql.service [Service] User=tecmint ExecStart=/opt/myapp/bin/myapp Restart=on-failure [Install] WantedBy=multi-user.target Save the file and exit the editor. * `Wants=postgresql.service` pulls PostgreSQL into the transaction when the application starts, but the application can still start if PostgreSQL fails. * `After=network.target postgresql.service` orders the application after these units during startup. It does not itself pull them into the transaction or guarantee that PostgreSQL is ready to accept connections. * `Restart=on-failure` restarts the application if it exits unsuccessfully, subject to systemd’s restart limits. It does not retry database connections unless the application exits or implements its own retry logic. Use `Wants=network-online.target` together with `After=network-online.target` only when the service genuinely needs the network configured before startup and this may reintroduce the wait-online delay discussed in Tip 5. Validate the unit, reload systemd, and enable the service: sudo systemd-analyze verify /etc/systemd/system/myapp.service sudo systemctl daemon-reload sudo systemctl enable --now myapp.service If verification succeeds, it normally produces no output. Check the service status and logs to confirm that the application actually starts and connects to PostgreSQL: systemctl status myapp.service journalctl -u myapp.service -b --no-pager **Remember** : `Wants=` controls dependency activation, while `After=` controls ordering. For reliable database startup, configure the application to retry connections or use a readiness check appropriate to the application and database. If Requires= versus `Wants=` finally makes sense, share this with a developer who writes systemd units for your team. ## Pro Tips: Confirm the Gains and Avoid Boot Failures With these changes in place, reboot and run `systemd-analyze time` and `critical-chain` again to compare against your baseline. If boot stops at “**You are in emergency mode** ” after editing fstab, run `journalctl -xb` to find the failing `.mount` unit. Ubuntu locks the root account by default, so emergency mode may not open a shell, which is why `findmnt --verify` matters on SSH-only servers. “**Unit ModemManager.service is masked** ” means something still needs that unit, and “**Found ordering cycle** ” means two `After=` lines point at each other. ##### Conclusion You can now measure boot time, find the units that really delay it, and fix unused services, wait-online delays, slow mounts, and unit ordering. To go further with boot targets and recovering a server that won’t boot, our RHCSA (RHEL 10 / EX200) course covers the boot process in depth. We’d love to hear what you found. Which unit topped your critical chain? Has masking a service ever broken something unexpected? Feel free to share your wait-online overrides or fstab options in the comments.
010 1
LXer @lxer.mas.to.ap.brid.gy · 14/10/2026
New Steam Client Update Adds Many Linux Improvements, Big Picture Screensaver 9to5linux.com/new-steam-client-upda… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 13/10/2026
Mozilla Thunderbird 158 Email Client Improves Quick Filter Responsiveness 9to5linux.com/mozilla-thunderbird-1… #9to5linux #linux
020 2
LXer @lxer.mas.to.ap.brid.gy · 13/10/2026
TUXEDO Stellaris 16 Gen8 Linux Laptop Unveiled with Intel Core Ultra 9 290HX Plus 9to5linux.com/tuxedo-stellaris-16-g… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 13/10/2026
Linux Mint 27 “Adrien” Slated for Release on Christmas, Based on Ubuntu 26.04 LTS 9to5linux.com/linux-mint-27-adrien-… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 12/10/2026
Ubuntu’s Myna Speech-to-Text App Is Now Available as a Technology Preview 9to5linux.com/ubuntus-myna-speech-t… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 12/10/2026
openKylin 3.0 Released with Expanded AI Integration www.linux-magazine.com/Online/News/… #linux #magazin #itprofessionell
linux-magazine.com
openKylin 3.0 Released with Expanded AI Integra... » Linux Magazine
The latest release features a pre-installed AI agent to help perform tasks.
000 0
LXer @lxer.mas.to.ap.brid.gy · 12/10/2026
Mozilla Firefox 159 Enters Public Beta Testing with Wayland Improvements 9to5linux.com/mozilla-firefox-159-e… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 12/10/2026
DigitalOcean Ends Open Source Credits Program www.linux-magazine.com/Online/News/… #linux #magazin #itprofessionell
linux-magazine.com
DigitalOcean Ends Open Source Credits Program » Linux Magazine
In a change that has surprised many open source developers, DigitalOcean has decided to sunset its Open Source Credits Program.
000 0
LXer @lxer.mas.to.ap.brid.gy · 12/10/2026
Ubuntu 27.04 “Tenacious T-Rex” Is Slated for Release on April 22nd, 2027 9to5linux.com/ubuntu-27-04-tenaciou… #9to5linux #linux
9to5linux.com
Ubuntu 27.04 “Tenacious T-Rex” Is Slated for Release on April 22nd, 2027
Canonical's next major Ubuntu release, Ubuntu 27.04 "Tenacious T-Rex," has been slated for release on April 22nd, 2027, and it’s expected to come with the GNOME 52 desktop environment and Linux kernel 7.6. The post Ubuntu 27.04 “Tenacious T-Rex” Is Slated for Release on April 22nd, 2027 appeared first on 9to5Linux - do not reproduce this article without permission. This RSS feed is intended for readers, not scrapers.
000 0
LXer @lxer.mas.to.ap.brid.gy · 12/10/2026
Mozilla Firefox 158 Is Now Available for Download, Here’s What’s New 9to5linux.com/mozilla-firefox-158-i… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 12/10/2026
Podman vs Docker Engine: Why Teams Choose Rootless Containers Read more here www.tecmint.com/podman-vs-docker-ro… #linux #opensource #tecmint
tecmint.com
Podman vs Docker Engine: Why Teams Choose Rootless Containers
Anyone in the **docker** group can effectively become root because the Docker daemon runs as root and obeys commands sent through its Unix socket. **Podman** takes a different approach by eliminating the central daemon and supporting rootless containers, pods, and Quadlet services managed through systemd. Imagine a developer needs to run containers on a shared build server, so you add their account to the `docker` group. That seemingly harmless change can give them root-level access to the host. For example, they could run `docker run -v /:/host` and access or modify host files because the Docker daemon (`dockerd`) runs with root privileges and executes requests received through its socket. Docker’s own documentation explicitly warns that membership in the `docker` group grants root-level privileges, making it a significant concern in security-conscious environments. Docker Engine does provide a rootless mode, but it is not the default and is not always enabled on production servers. **Podman** removes the daemon entirely, runs containers as child processes of the user who starts them, and uses `Linux` user namespaces to map container root to an unprivileged host user. It also supports **Kubernetes-style pods** and integrates with systemd through **Quadlet** , making it possible to manage containers as native services. In this guide, we’ll look at how Podman’s rootless architecture works, how it compares with Docker from a security perspective, and how to run containers, pods, and systemd-managed services without giving users unnecessary root-level access. ## How Docker Engine and Podman Start a Container Both **Docker Engine** and **Podman** run the same OCI-compliant container images. The important difference is what sits between your command and the container, how those components are managed, and which user owns them. Podman vs Docker Engine Architecture With Docker Engine, the `docker` command acts as a client. It sends API requests through `/var/run/docker.sock` to the root-owned `dockerd` daemon. Docker then uses containerd and an OCI runtime such as `runc` to create and manage containers. By default, this entire control path is tied to the root-owned Docker daemon, which is why access to its socket effectively provides root-level control over the host. If `dockerd` stops, Docker normally loses control of its containers as well. Docker’s live-restore feature can keep containers running while the daemon is unavailable, but it does not remove the daemon from the architecture. **Podman** takes a different approach. There is no central daemon waiting for client requests. The `podman` command directly creates and starts the container, using conmon (container monitor) to keep watch over the container process and an OCI runtime, usually crun, to create the container. Because each container has its own monitor process, **Podman** does not require a shared daemon to remain running after the container has started. In rootless mode, these processes can run under the regular user’s account rather than through a root-owned service. This daemonless design also fits naturally with systemd and Quadlet, allowing containers and pods to be managed as user or system services without introducing a permanently running container daemon. If this finally explained why the docker group shows up in every security audit, share it with someone who still adds developers to it by default. ## Install Podman on Rocky Linux and Ubuntu Now that you know what changes under the hood, let’s install **Podman** on the lab server (`192.168.122.248`) as the regular tecmint user with `sudo` access. There is no daemon to enable afterwards. On **Rocky Linux** , **AlmaLinux** , and **RHEL** , Podman is available through the AppStream repository, so `dnf` can install it directly: sudo dnf install -y podman On **Ubuntu** and **Debian** , refresh the package index first so apt installs the latest packaged version: sudo apt update sudo apt install -y podman The exact **Podman** version depends on the distribution and release. For example,**Ubuntu 26.04 LTS** currently packages **Podman 5.7.0** , while the upstream Podman documentation is already in the **6.1** series. The commands and rootless workflow used in this guide are compatible with **Podman 5** and **6**. ### Configure Subordinate User IDs Rootless Podman uses **Linux** user namespaces to map container users to unprivileged host users. For this mapping to work normally, the user needs subordinate UID and GID ranges in `/etc/subuid` and `/etc/subgid`. **Podman** checks these files when creating rootless containers. Check whether the `tecmint` account already has the required ranges: grep tecmint /etc/subuid /etc/subgid You should see output similar to: /etc/subuid:tecmint:100000:65536 /etc/subgid:tecmint:100000:65536 If either file has no entry for tecmint, add a subordinate UID and GID range: sudo usermod --add-subuids 100000-165535 \ --add-subgids 100000-165535 tecmint Then migrate the user’s existing Podman state: podman system migrate The migration step is important when changing subordinate ID ranges because rootless Podman can keep a pause process and existing user namespace alive with the previous mappings. podman system migrate stops the relevant containers and pause process so the new `/etc/subuid` and `/etc/subgid` mappings can take effect. At this point, tecmint has everything needed to start using Podman in rootless mode, without belonging to the privileged docker group. ## Compare Podman and Docker with Real Workloads With **Podman** installed, the clearest way to see the difference is to run workloads you would normally run with Docker and then inspect which host user owns the resulting processes. ### Example 1: Check Which Host User Owns a Container Process Example 1: Check Which Host User Owns a Container Process Start an Alpine container as `tecmint` without `sudo`, then look at its process from the host side: podman run -d --name sleeper docker.io/library/alpine sleep 600 ps -o user,pid,cmd -C sleep You should see output similar to:: USER PID CMD tecmint 4821 sleep 600 Now check the user from inside the container: podman exec sleeper whoami The command prints: root This is the important distinction: root inside a rootless container is not root on the host. **Podman** uses a user namespace to map the container’s root user to an unprivileged host identity. From the host’s perspective, the sleep process belongs to tecmint. For comparison, start the same workload through Docker’s root-owned daemon: sudo docker run -d --name sleeper-docker docker.io/library/alpine sleep 600 ps -o user,pid,cmd -C sleep The Docker container’s process appears as owned by `root` on the host. Rootless Podman therefore reduces the impact of a container compromise or escape: an attacker breaking out of the container does not automatically gain host-root privileges. They initially inherit the privileges of the host user running the container. That still matters, so the tecmint account should have only the permissions it actually needs. Clean up both test containers before continuing: podman rm -f sleeper sudo docker rm -f sleeper-docker If you have ever had to justify container access to a security team, share this with a colleague who still runs every container through `sudo` docker. ### Example 2: Group a Web Server and Database in a Pod The first example ran a single container, but real applications often consist of multiple containers that need to communicate. **Docker** typically handles this with a user-defined network, while **Podman** can place related containers in a pod that shares a network namespace. Create a pod and publish port `8080` on the host to port `80` inside the pod: podman pod create --name webstack -p 8080:80 Now start MariaDB and Nginx inside the same pod: podman run -d --pod webstack --name db -e MARIADB_ROOT_PASSWORD=ChangeMe123 docker.io/library/mariadb:11 podman run -d --pod webstack --name web docker.io/library/nginx:alpine Check the pod: podman pod ps You should see output similar to: POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 3f9c2a71b0de webstack Running 40 seconds ago 8a1d5e2c4f90 3 Seeing three containers even though you started only two is normal. **Podman** creates an additional infra container for the pod. It holds the pod’s shared network namespace open so that the other containers can share it. Because the containers in a pod share the same network namespace, they can reach each other through localhost. For example, the Nginx container could connect to MariaDB at: 127.0.0.1:3306 This example does not configure **Nginx** to use **MariaDB** , so the connection is only demonstrating the networking model. In a real application, the `web` container would need application-level configuration and credentials to communicate with the database. **Podman** can also generate Kubernetes-compatible YAML from the pod: podman kube generate webstack > webstack.yaml You can then use that YAML to recreate the workload: podman kube play webstack.yaml This gives **Podman** a useful bridge between local containers and Kubernetes-style workload definitions. Docker provides other mechanisms for defining multi-container applications, such as Compose, but it does not use the same Podman `kube generate` and `kube play` workflow for exporting and recreating pods. ### Example 3: Run a Container as a systemd Service with Quadlet The pod from Example 2 won’t return after a reboot, because no daemon restarts it. **Podman** hands that job to systemd through Quadlet, which turns a `.container` file in your home directory into a systemd unit: mkdir -p ~/.config/containers/systemd On **Ubuntu** and **Debian** , create the unit file with nano: nano ~/.config/containers/systemd/webapp.container On **Rocky Linux** , **AlmaLinux** , and **RHEL** , minimal installs ship with vi rather than nano, so use vi there: vi ~/.config/containers/systemd/webapp.container Then add the following configuration to the file: # ~/.config/containers/systemd/webapp.container [Unit] Description=Nginx web container managed by Quadlet [Container] Image=docker.io/library/nginx:alpine ContainerName=webapp PublishPort=8081:80 AutoUpdate=registry [Service] Restart=always [Install] WantedBy=default.target Here: * `Image` uses the full registry path, which `AutoUpdate` requires. * `ContainerName` replaces the default name `systemd-webapp`. * `PublishPort` uses port 8081 to avoid clashing with the Example 2 pod. * `AutoUpdate=registry` lets podman `auto-update` pull newer images. * `Restart=always` restarts the container whenever it stops. * `WantedBy=default.target` starts it with your user session, replacing `systemctl enable`. Save the file and exit the editor. Since a rootless user’s systemd instance stops at logout, enable lingering first, then load and start the generated unit: sudo loginctl enable-linger tecmint systemctl --user daemon-reload systemctl --user start webapp.service If start fails with Unit webapp.service not found, Quadlet rejected the file, and /usr/libexec/podman/quadlet -dryrun -user prints the exact error. Once it starts, test a failure by killing the container and checking the service a few seconds later: podman kill webapp systemctl --user status webapp.service --no-pager **Output** : ● webapp.service - Nginx web container managed by Quadlet Loaded: loaded (/home/tecmint/.config/containers/systemd/webapp.container; generated) Active: active (running) since Tue 2026-10-06 11:42:17 IST; 4s ago The `4s ago` timestamp shows systemd started a fresh container without root. If Quadlet just replaced a pile of docker run `--restart` scripts for you, share it with the person who maintains your server runbooks. ## When to Choose Podman or Docker Engine After those three examples, the choice usually depends on your environment. **Docker Engine** remains easier when your team relies on Docker Desktop, Docker Swarm, or BuildKit-specific features, since those tools are built around the Docker daemon. **Podman** fits better on shared servers, RHEL-based fleets, and anywhere an audit asks who can become root. The `podman-docker` package provides a `docker` command that calls **Podman** , and tools expecting a Docker socket, such as CI runners, can use Podman’s API socket after `systemctl --user enable --now podman.socket`. One limitation catches most people. Rootless containers can’t bind ports below 1024, so `-p 80:80` fails with rootlessport cannot expose privileged port `80`. Either publish a high port behind a reverse proxy, or lower the limit with `sudo sysctl net.ipv4.ip_unprivileged_port_start=80` and save it in `/etc/sysctl.d/`. ##### Conclusion **Podman** runs the same images as **Docker Engine** without a root daemon, maps container root to a normal user, and lets systemd manage containers through Quadlet. On shared servers, that removes the biggest risk of a default Docker setup without changing your daily commands. If you’re working toward Red Hat certification, our RHCSA (RHEL 10 / EX200) course on Pro tecmint covers the RHEL skills rootless containers depend on, including systemd and SELinux. We’d love to hear how your team runs containers today. Have you moved production workloads to rootless Podman, or is Swarm keeping you on Docker? Share your Quadlet files or migration errors in the comments.
010 1
LXer @lxer.mas.to.ap.brid.gy · 11/10/2026
9to5Linux Weekly Roundup: October 11th, 2026 9to5linux.com/9to5linux-weekly-roun… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 10/10/2026
19 Quick systemd-networkd Config Hacks to Speed Up Your Linux Server Read more here www.tecmint.com/systemd-networkd-pe… #linux #opensource #tecmint
tecmint.com
010 1
LXer @lxer.mas.to.ap.brid.gy · 09/10/2026
KDE Releases KDE Frameworks 6.31 with Various Improvements and Bug Fixes 9to5linux.com/kde-releases-kde-fram… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 09/10/2026
Canonical Announces Official Ubuntu Desktop Images for RISC-V 9to5linux.com/canonical-announces-o… #9to5linux #linux
001 1
LXer @lxer.mas.to.ap.brid.gy · 09/10/2026
10 Tips to Harden SSH Access on Production Ubuntu Servers Read more here www.tecmint.com/ssh-hardening-tips-… #linux #opensource #tecmint
tecmint.com
000 0
LXer @lxer.mas.to.ap.brid.gy · 09/10/2026
Ventoy 1.1.18 Adds Experimental Support for SteamOS Recovery Images 9to5linux.com/ventoy-1-1-18-adds-ex… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 09/10/2026
Calibre 9.16 E-Book Manager Improves Read Aloud, PDF Input, and Kobo Support 9to5linux.com/calibre-9-16-e-book-m… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 09/10/2026
Google's Kage Project Rethinks Linux Kernel Security With Isolated Device Drivers www.linuxjournal.com/content/google… #linuxnews #linuxjournal #opensource
linuxjournal.com
Google's Kage Project Rethinks Linux Kernel Security With Isolated Device Drivers | Linux Journal
010 1
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
Linux Moves Closer to Retiring the x32 ABI After Years of Limited Adoption www.linuxjournal.com/content/linux-… #linuxnews #linuxjournal #opensource
linuxjournal.com
Linux Moves Closer to Retiring the x32 ABI After Years of Limited Adoption | Linux Journal
010 1
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
Raspberry Pi Imager 2.0.12 Released with Sequential Writes via io_uring on Linux 9to5linux.com/raspberry-pi-imager-2… #9to5linux #linux
9to5linux.com
Raspberry Pi Imager 2.0.12 Released with Sequential Writes via io_uring on Linux
Raspberry Pi Imager 2.0.12 flashing tool for Raspberry Pi devices is now available for download with a wide-ranging set of improvements across networking, write reliability, security, and the embedded installer experience. The post Raspberry Pi Imager 2.0.12 Released with Sequential Writes via io_uring on Linux appeared first on 9to5Linux - do not reproduce this article without permission. This RSS feed is intended for readers, not scrapers.
000 0
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
GStreamer 1.28.8 Multimedia Framework Improves the AMD AMF AV1 Video Encoder 9to5linux.com/gstreamer-1-28-8-mult… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
Q4OS 6.10 “Andromeda” Is Out with KDE Plasma 6.3.6 and Trinity Desktop 14.1.5 9to5linux.com/q4os-6-10-andromeda-i… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
Blender 5.3 Enters Public Beta Testing with Vulkan Backend by Default on Linux 9to5linux.com/blender-5-3-enters-pu… #9to5linux #linux
9to5linux.com
Blender 5.3 Enters Public Beta Testing with Vulkan Backend by Default on Linux
Blender 5.3 open-source 3D graphics software is now available for public beta testing with the Vulkan backend by default on Linux, support for panoramic cameras, and many other changes. The post Blender 5.3 Enters Public Beta Testing with Vulkan Backend by Default on Linux appeared first on 9to5Linux - do not reproduce this article without permission. This RSS feed is intended for readers, not scrapers.
000 0
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
COSMIC 1.10 Adds Support for Mapping Drawing Tablets to Specific Displays 9to5linux.com/cosmic-1-10-adds-supp… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
KDE Gear 26.08.2 Released with More Improvements for Your Favorite KDE Apps 9to5linux.com/kde-gear-26-08-2-rele… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 08/10/2026
btop: Monitor CPU, Memory, Disk, and Network in Linux Read more here www.tecmint.com/btop-system-monitor… #linux #opensource #tecmint
tecmint.com
010 1
LXer @lxer.mas.to.ap.brid.gy · 07/10/2026
Ubuntu Summit for Ubuntu 26.10 Takes Place on November 12-13, 2026 9to5linux.com/ubuntu-summit-for-ubu… #9to5linux #linux
000 0
LXer @lxer.mas.to.ap.brid.gy · 07/10/2026
OpenVPN 2.7.8 Released with Security and Bug Fixes, Various Improvements 9to5linux.com/openvpn-2-7-8-release… #9to5linux #linux
000 0