Tag: Ubuntu

  • Daily Driving Linux in 2025

    Daily Driving Linux in 2025

    Woke up this morning with zero agenda. No pressing tasks, no urgent errands—just a blank slate and the sweet freedom to figure things out as I went. And what did I figure out? Today was the day to replace the NVMe in my trusty Lenovo X1 Carbon (2018 model). This laptop’s been a total workhorse for me, still rocking an i7 and 16GB of RAM, so it felt like the perfect candidate for a little weekend refresh.

    Now, for the big decision: the operating system. I’ve been really digging my recent server-side work with Alpine Linux, and its minimalist vibe is fantastic for what it is. But as a daily driver? Eh, not quite. It feels like almost everything requires a bit of a workaround compared to a more traditional Linux setup. Don’t get me wrong, Alpine’s got a unique set of goals, and I still love it for its niche, but for my everyday grind, I decided to return to an old friend: Ubuntu.

    Normally, even with Ubuntu (which I’ve got plenty of server-side experience with), I stick to the LTS (Long Term Support) releases. But today felt different. I wanted to see what the bleeding edge had to offer, so I threw caution to the wind and went with Ubuntu 25.04. Go big or go home, right?

    As expected, the installation was pretty much a breeze. A few quick questions, and the installer hummed along, doing its thing. Once that was done, I dove straight into getting my daily tools set up. It’s funny how that list keeps shrinking, mostly because so much of what I do is browser-based these days. But here’s the essential lineup:

    • Google Chrome (Had to snag the .deb file directly from Google’s site for this one—a minor hiccup!)
    • Joplin
    • Owncloud Client Sync
    • Draw.io
    • PowerShell
    • Signal

    Pretty straightforward, huh?

    So far, the graphics are behaving perfectly, and YouTube streams without a hitch. I’m no gamer, but I did a quick test just to see how it handled. And speaking of tests, Wine is a new “thing” for me; I’ve never actually needed it before. But seriously, the installer just did its magic without any input from me. Big win!

    Alright, now for the real test: actually using it day-to-day. I’ll report back with how it holds up! Catch ya later!

  • a simple homelab

    a simple homelab

    I’ve tried writing this post a dozen times now and I think I’ll go with the most simplistic route of just giving a high level overview. You can ask questions or Google your heart out to find the missing pieces. The purpose of this document is to inspire you to build a homelab, not a full step-by-step so here we go….

    Proxmox is a free, enterprise grade, open-source virtualization platform that allows you to run multiple virtual machines on a single host machine. This is a great way to experiment with different operating systems and software without having to dedicate a physical machine to each one. Docker is a containerization platform that allows you to package an application with all of its dependencies into a self-contained unit. This makes it easy to deploy and run applications consistently across different environments. OpenMediaVault is a network-attached storage (NAS) solution that allows you to create a centralized storage pool for your data.

    By combining these three technologies, you can create a powerful and versatile homelab that can be used for a variety of purposes. For example, you could use Proxmox to run a virtual machine for your Ghost blog, a virtual machine for a web server, and a virtual machine for a media server like Plex. You could then use Docker to deploy containers for additional services, such as a database or a development environment. Finally, you could use OpenMediaVault to create a centralized storage pool for your data with NFS or SMB, such as your blog posts, media files, and backups.

    Links

    Proxmox Server Solutions
    Proxmox develops powerful and efficient open-source server solutions like the Proxmox VE platform, Proxmox Backup Server, and Proxmox Mail Gateway.

    Proxmox – Virtualization

    Docker: Accelerated Container Application Development
    Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

    Docker – Containerization

    Kubernetes and Docker Container Management Software
    Portainer is your container management software to deploy, troubleshoot, and secure applications across cloud, datacenter, and Industrial IoT use cases.

    Portainer – Kubernetes and Docker Management

    Proxmox VE Helper-Scripts
    A Front-end for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.

    Proxmox Helper Scripts to Launch Servers Quickly

    openmediavault – The open network attached storage solution
    openmediavault is the next generation network attached storage (NAS) solution based on Debian Linux. It contains services like SSH, (S)FTP, SMB/CIFS, AFS, UPnP media server, DAAP media server, RSync, BitTorrent client and many more.

    OpenMediaVault – Network Attached Storage

    Ghost: The best open source blog & newsletter platform
    Beautiful, modern publishing with email newsletters and paid subscriptions built-in. Used by Platformer, 404Media, Lever News, Tangle, The Browser, and thousands more.

    Ghost – Content Management

    Get Started

    I am building this on a 12 year old Dell Optiplex 7010 with an i7 CPU, 12 Gb RAM, and a 240Gb SSD. It’s not much, but it’ll more than get the job done and get you on your way to building a new homelab or expanding your current one.

    We will start off easy, but also be fully functional by the time this is done. On top of Docker we will run 3 service VM’s. Nginx Proxy Manager, Ghost CMS and Watchtower. Ghost is the server we will present to the world. Nginx Proxy Manager will handle SSL offload and some security fundementals. Watchtower will keep the Docker containers updated. Docker will be managed via Portainer giving a very well polished and extensable Web UI for building your homelab. Essentially, this is what we are building:

    Bottom Up – Hardware –> Proxmox –> Hypervisor –> OS’ –> Docker

    Proxmox

    Here’s a tl;dr without the actual long read:

    Here’s a starting point for IP’s and resource allocation.

    hostname ip/url cpu ram disk1 disk2
    pm1 https://192.168.254.5:8006 8 Cores 12Gb 240Gb
    ovm1 https://192.168.254.6 2vCPU 2048Gb 32Gb 50Gb
    docker1 https://192.168.254.7:9443 2vCPU 4096Gb 16Gb

    Download and Install Proxmox on your hardware. Use the information presented in this post to answer as many questions as you can. This has been done a thousand times over and well documented on the internet. Proxmox’s wiki is a great reference.

    1. Download ISO – https://enterprise.proxmox.com/iso/proxmox-ve_8.3-1.iso
    2. Use Etcher to copy that ISO to a USB drive – https://pve.proxmox.com/wiki/Prepare_Installation_Media & https://etcher.io/
    3. Use the USB drive to install Proxmox on your hardware – https://pve.proxmox.com/wiki/Installation#chapter_installation

    Once you have Proxmox installed, login via the browser to the IP you set the server to. In the example here https://192.168.254.5:8006.

    OpenMediaVault

    Download the ISO for OpenMediaVault to your computer and upload that ISO to “local” storage on Proxmox. Use the information above as a reference. From there we install OVM via Proxmox’s UI. In the example here we create a VM with the OVM ISO using mostly defaults with 2vCPU Cores, 2Gb RAM and a single 32Gb Disk. You can create the 2nd 50Gb Disk for NFS here as well. Then we login to OVM’s UI, do updates, change any settings we need to (timezone, password, IP, etc.). Then we provision the 2nd disk as an ext4 filesystem, create a /docker shared folder and finally expose that shared folder via NFS.

    1. Download OVM ISO – https://sourceforge.net/projects/openmediavault/files/iso/7.0-32/openmediavault_7.0-32-amd64.iso
    2. Upload the OVM ISO to Proxmox via the Proxmox UI
    3. Create a new VM via the Proxmox UI with the following: 2vCPU Cores, 2Gb RAM, 2 Disks (1st a 32Gb for the OS and a 2nd 50Gb for NFS)
    4. Login to the OVM UI and make your settings changes, run updates and do a final reboot before starting the rest.
    5. Create an ext4 filesystem on the 50Gb disk.
    6. Create a /docker shared folder
    7. Expose the /docker shared folder via NFS with the following: client – 192.168.254.0/24, permission – read/write, extra options – subtree_check,insecure,no_root_squash. Click Save, then Apply.

    Ubuntu 24.04 LXC w/ Docker

    For this step, we’ll be using Proxmox VE Helper-Scripts to install an Ubuntu 24.04 LTS LXC (linux container) that installs Docker and Portainer for us. There’s a few modifications we need make in addition to deploying the LXC like modifying the LXC conf file on the Proxmox Host, permissions related settings on the LXC guest, and then the NFS client setup. After that we’ll be able to deploy some Docker containers and start having fun.

    1. From your computer go to https://community-scripts.github.io/ProxmoxVE/scripts?id=docker and copy the .sh script URL to your clipboard and paste it into the Proxmox Console (I recommend opening a new console or using SSH on the Proxmox host) and paste the .sh script URL. This will kick off an installer script prompt that you’ll need to answer.

    I rarely go with defaults for this for some reason so here’s what I do:

    Select Advanced Then…

    • Container: Priviliged
    • Hostname: docker1
    • Disk size: 8Gb
    • CPU: 2
    • RAM: 2
    • Network: vmbr0
    • IP Address: 192.168.254.6/24 #make this your IP
    • Gateway: 192.168.254.254 #make this your default GW
    • Disable IPv6: yes
    • DNS Search Domain: blank
    • DNS Server IP: 1.1.1.1 #or whatever you use
    • VLAN: blank
    • Root SSH: yes
    • Verbose Mode: no
    1. After your LXC Container is deployed, use the Proxmox UI to shut it down. Take note of the ID Number of the LXC Container you crated. Then from the Proxmox shell you’ll need to add a line to that container’s config file with this command:
      echo -e "lxc.apparmor.profile = unconfined" >> /etc/pve/lxc/103.conf #the 103 needs to be replaced with your ID Number of the LXC you created.
    2. Now under that LXC in the Proxmox UI, you’ll want to go to Options –> Features and check NFS, Fuse and ensure Nesting is also checked. Save and start the CT.
    3. Login to the Docker server with SSH
    4. Create a new user with useradd dockeradmin
    5. Set the password with passwd dockeradmin
    6. Add that user to the /etc/sudoers file with the following syntax:
    visudo /etc/sudoersdockeradmin ALL=(ALL) ALLcontrol XYEnter
    1. Run the following commands:
    apt update && apt upgrade -yapt install curl gpg nfs-common -ymkdir -p /opt/docker
    1. Modify the /etc/fstab to permanently mount the newly minted NFS share from OMV with the following:
    echo -e "192.168.254.5:/docker /opt/docker nfs vers=4.2,rw,hard,intr 0 0" >> /etc/fstab
    1. Reboot the Docker server, log back in via ssh and run the command:
    mount | grep nfs

    If you see the mount, you are good to go onto the Portainer step.

    Portainer

    Portainer was installed during the LXC script process (or should have been). It’s pretty easy to install if you missed that step. In Portainer, I like to use “Stacks” as it helps me keep track of the docker compose elements I run as well as modify later without the feeling of starting from scratch…or doing everything from VI/CLI.

    Let’s deploy our 3 stacks. Below will be 3 already modified compose.yml files that you’ll copy into Portainer’s Web Config under Stacks. Modify the particulars if you know what your doing. You’ll notice the volumes use the previously created /opt/docker directory that is NFS mounted to OMV.

    services:  app:    image: 'jc21/nginx-proxy-manager:latest'    restart: unless-stopped    ports:      - '80:80' # Public HTTP Port      - '443:443' # Public HTTPS Port      - '81:81' # Admin Web Port    environment:      DB_SQLITE_FILE: "/data/database.sqlite"      DISABLE_IPV6: 'true'      INITIAL_ADMIN_EMAIL: [email protected]      INITIAL_ADMIN_PASSWORD: reallySTRONGpassword    volumes:      - /opt/docker/npm/data:/data      - /opt/docker/npm/letsencrypt:/etc/letsencrypt

    Nginx Proxy Manager Docker Compose

    services:  ghost:    image: ghost:5-alpine    restart: always    ports:      - 2368:2368    environment:      database__client: mysql      database__connection__host: db      database__connection__user: root      database__connection__password: REALLYstrongPASSWORD      database__connection__database: ghost      url: https://fqdn.publicsite.tld #UPDATE THIS WITH YOUR HOST.DOMAIN.TLD    volumes:      - /opt/docker/ghost/content:/var/lib/ghost/content  db:    image: mysql:8.0    restart: always    environment:      MYSQL_ROOT_PASSWORD: REALLYstrongPASSWORD    volumes:      - /opt/docker/ghost/db:/var/lib/mysqlvolumes:  ghost:  db:

    Ghost w/ MariaDB Docker Compose

    services:  watchtower:    image: containrrr/watchtower    volumes:      - /var/run/docker.sock:/var/run/docker.sock    command: --interval 300 # Check for updates every 5 minutes    restart: always

    Watchtower Docker Compose

  • And then there was Ubuntu…

    Ubuntu LogoQuite recently my eyes were opened to a Linux distribution called Ubuntu. The latest release from the open source company Canonical is called Feisty Fawn. How can you deny or refuse a name like that. 🙂

    Well, I figured I would dedicate a post to how much I truely enjoy the OS vs it’s or Linux competitors as well as the big Microsoft. The installation disk is easily available via http://www.ubuntu.com where you can either download it or have 1 or more copies sent to you via snailmail (I get 25 because I’m a consultant). On the install CD (not DVD) there are a few cool features that make the product stand out from the rest like a suite of open source Windows apps that can be installed directly from the CD to include Firefox, Thunderbird, Clam AV, and others. Truly unique. Then when you boot from the CD you actually boot to a live distribution where you can either use the live CD to see if you will actually like the or install it to your hard drive via a very intuitive wizard. The wizard asks you a few non technical questions and guides you through the install. You can dual boot with Windows or another OS or just wipe the drive and start fresh.

    On a side note, because of how well setup the live CD is, you can actually read and write to the NTFS, FAT or other drive that you have in your computer as a quick and easy disk recovery tool. Still not impressed. Ok, I really haven’t told you very much but for the novice user these fundamental options make the OS very attractive. After you go through the install, you reboot and come up to a login window and then into the operating system. The only thing that my laptop needed done in addition to the OS install is the installation of the Broadcom WIFI card firmware for my specific hardware which was easily done in Ubuntu’s intuitive package manager, Synaptic. Synaptic is a front end for apt-get that makes installing and updating packages a synch.

    I usually judge a product by it’s “Out of the Box” features. As for Ubuntu, the OS installs, Firefox, Evolution Mail, Gaim, OpenOffice, graphics rendering software, a photo viewer, a suite a games, and a terminal services client. So in my opinion, it’s already a step ahead of Microsoft. Accessing shares and other network resources is quite simple just like in XP and has a neat feature that saves the user name and password for a particular network resource in it’s password manager.

    I plan to do a few more blog entires regarding the use and utilization of Ubuntu in the home, business and corporate environment on both the client and server end of the spectrum. As the OS is still a Linux derivative, it can run Postfix, Sendmail, Apache, MySQL, Spam assassin, and all of the server centric applications that we rely on everyday. Hope you all at least give the OS a try, I’ll have my first Ubuntu “how-to” on here soon for your enjoyment.