• 2 Posts
  • 76 Comments
Joined 2 years ago
cake
Cake day: December 12th, 2023

help-circle
  • Since last time, I’ve finally learned how to make rootless podman work on Alpine Linux and it’s been pretty smooth so far.

    My Pi4 is quietly running HomeAssistant and I like to leave that untouched so I don’t have to worry about pooping in the dark. I learned that the container requires root in order to access the Zigbee USB dongle through dbus so I can’t really run it as a rootless container. It’s not web facing so it’s locked down to my local network which is good enough for me.

    My Pi5 is finally up and running again. Got a new, shorter domain name, managed to get the TLS set up in one go with Caddy which was nice. Right now I just have a bunch of wiki’s hosted with Kiwix and a file server using Caddy.

    I’m putting the final touches on my series of scripts I wrote meant for automating backups. rTransfer for the actual backup, remoff for rotating backups (I plan to keep 1 backup a week, over a months time), and containers-util(work in progress) to automatically start and stop containers in preparation for a backup.

    A bit crazy but I’ve been working on this whole backup process on and off for about a year now. It’s all POSIX portable except for a few commands like rsync and podman. Once I finish the last script, I’ll set up a blog and then my server will be secure to my liking and very low maintenance (my keep-alive script I also wrote has been working better than expected).

    I also wrote a Dynamic MOTD script which updates /etc/motd with some basic information about the machine so I can get a quick look at the machine I’m ssh’ing into. I’m quite happy with how it turned out too.

    I’ve been trying to use as few programs as possible and building my own when I can. It’s been quite the adventure this past year and a bit.




  • I keep everything I do as minimal as possible.

    Everything is documented using either sh scripts or markdown style plain text files. If I need anything more than that, I’m over complicating things for my brain.

    The upside to this approach is that it works anywhere because it’s all just text files and it’s very tiny in size. I am more interested in making low-power/low-spec things work so less is appropriate.


  • I have lots of scripts and aliases since I run a very mininal setup.

    The aliases are automatically set when I start a new shell and I have a shortcut command to cat the alias file so I can quickly view what aliases and functions I have saved.

    I also have a folder that contains all my notes and scripts. It’s all organized and it acts as a staging area before I move any scripts to the proper location or device.

    I found a hobby in writing scripts. I’ve been spending a lot of time writing my own backup system that uses rsync and it’s nearing completion which I’m excited about. It’s been something I’ve been working building on and off since the new year began.



  • I’m currently in the process of setting up my home server again but this was basically my setup before. Alpine Linux + SSH + Docker and I kept everything to a minimum.

    This time I’m setting up rootless Podman in place of Docker and as of today the switch over is complete.

    I’m thinking of trying to use wireguard as a way to secure my ssh port but I’m still trying to learn and figure out if that’s possible.

    With all the security and trust issues hitting the self-hosting headlines, less and simple is completely fine with me.



  • I run a super minimal setup for my server and home network devices but I still like to see how the self-hosting scene is evolving. It’s changed so much in the last year alone.

    I think one reason why I choose to run such a minimal setup is because there’s so many trust issues that seem to be developing over time with so many different projects. At the very least, every weekly newsletter keeps me inspired to keep creating my own projects.

    Recently I just finished writing my own back up system including rotating out old backups using only rsync and POSIX portable shell commands. I wrote the scripts to be adaptable to many uses outside of just backups so I am really proud of how they turned out.

    My next self-hosting project is something far more absurd and I’m excited to start developing it.


  • My server mysteriously stopped working in December. After a scheduled restart, the OS wouldn’t load so the fan was running on high for a few days while I was staying at a friends for a few days.

    I checked the logs and couldn’t find anything suspicious. Loaded a previous backup that worked and still nothing loaded on startup. Tested the Pi 5 with a USB drive that had a fresh Alpine Linux install on it and everything loaded up fine so I was able to rule out any hardware issues. The HDD with the old OS mounted just fine to my laptop. I still have no idea what happened.

    This happened a few days before my domain name expired and I was planning to change my domain name to something shorter. Decided to hold off on remaking my server from scratch until I finish a few other projects.

    The other projects will help me manage my network connected devices so it’s all working towards a common goal. Fortunately I am getting very close to finishing those projects. I am putting the final touches on my last project and should done within a few days.

    Next I’ll reinstall my Pi 4 with HomeAssistant again to fix it’s networking issue. Only the terrarium grow lights are affected and my gecko chose to hibernate outside of the terrarium this winter so she’s unaffected (heat lamps are controlled by a separate, isolated device). After that I’ll fix my Pi 5 server and this time go with Podman over Docker.


  • It’s been a learning experience. I am pretty much building it specifically for my use so it’s missing lots of stuff that’s standard on other fully featured OS’s. I’m mostly using a browser, Konsole terminal and KDE Kate as my editor.

    I found an unexpected hobby in writing POSIX scripts because it’s teaching me the inner workings of Linux. In the future I’d like to expand that to including the sed and awk commands but I haven’t really found a project to use them with yet.

    Alpine Linux does offer a setup-desktop command/script which will easily setup a few desktop environments such as Gnome, Plasma, Xfce, Mate, Sway and Lxqt. That only sets up the basic desktop environment so a lot of other work is needed to set up things like sound, graphics and a few other things.

    As I mentioned before, I still have Linux Mint DE installed. I mostly use it for Steam games but it has everything else I need for when I don’t feel like working out a problem because I wanted to simply open a .pdf file. However, it’s still really satisfying for me setting up a very specific work environment with the mininal tools I have available.

    I think there is value in learning to work within a mininal environment to help give more life out of lower spec technology that’s currently available. Especially now with all the ram supply issues because of the AI rush.



  • I don’t have any answers, just my own experiences. Last year I decided to use Alpine Linux as my Operating System for a couple of self-hosted things running on a Raspberry Pi. I chose it because it’s super minimal and used less common tools (for example doas instead of sudo). That unintentionally forced me to learn how to use Linux using more basic commands that are more likely to be available on other Linux systems.

    Alpine Linux uses Busybox-Ash which is a POSIX compliant shell that’s very small and very basic. The scripts I ended up writing tend to be POSIX portable meaning that they should work on a wider variety of systems. That comes at the cost of script simplicity and readability as well as missing out on many features that make Bash scripts more complex, robust and easier to work with.

    I have a working example POSIX portable script. I’ve been adding to it all the things I’ve learned. You can check it out here if you’re interested.

    I use Alpine Linux with Sway as my daily driver but still keep a copy of Linux Mint DE ready to use because it’s nice to have a fully featured work environment for the days I don’t want to think.




  • I created a file tree that looks similar to my system’s file tree, except it only contains all the files that I modified or added and only their respective directories. From there I just use rsync to sync those files/file tree to the system’s /.

    It’s convenient to see what changes I currently have but it requires a bit of manual maintenance. I only really started doing it that way because I was learning how to use rsync and I just kept going on with it because it was working for me.

    I’m only working with my laptop, android phone and two Raspberry Pi’s so I can get with my little rsync based setup.


  • I had a website that was set up for only my personal use. According to the logs the only activity I ever saw was my own. However, it involves a compromise. Obscurity at the cost of accessibility and convenience.

    First, when I set up my SSL cert, I chose to get a wildcard subdomain cert. That way I could use a random subdomain name and it wouldn’t show up on https://crt.sh/

    Second, I use an uncommon port. My needs are very low so I don’t need to access my site all the time. The site is just a fun little hobby for myself. That means I’m not worried about accessing my site through places/businesses that block uncommon ports.

    Accessing my site through a browser looks like: https//randomsubdomain.domainname.com:4444/

    I’m going on the assumption that scrapers and crawlers are going to be searching common ports to maximize the number of sites they can access over wasting their time on searching uncommon ports.

    If you are hosting on common ports (80, 443) then this isn’t going to be helpful at all and would likely require some sort of third party to manage scrapers and crawlers. For me, I get to enjoy my tiny corner of the internet with minimal effort and worry. Except my hard drive died recently so I’ll pick up again in January when I am not focused on other projects.

    I’m sure given time, something will find my site. The game I’m playing is seeing how long it would take to find me.


  • There’s a few things I backup from my phone.

    • Music downloaded from Seeker
    • Youtube audio downloaded from YTDLnis
    • Backups of Termux
    • Notes in plain text
    • Backups from certain apps that make their own backup data
    • Pictures that I have sorted and want to saved

    I have an Android phone so I use Termux as a terminal emulator. I use ssh and passwordless keys to make transfers simpler and quicker.

    Although this is closer to a backup process and not like SyncThing where it’s syncing a folder between two devices. I don’t believe rsync is capable of acting like SyncThing but I’m tempted to dig into rsync more and see if I can put something basic together one day.



  • I have two systems that sort of work together.

    The first system involves a bunch of text files for each task. OS installation, basic post OS installation tasks and a file for each program I add (like UFW, apparmor, ddclient, docker and so on). They basically look like scripts with comments. If I want to I can just copy/paste everything into a terminal and reach a a specific state that I want to be at.

    The second system is a sort of “skeleton” file tree that only contains all the files that I have added or modified.

    Here's an example of what my server skeleton file tree looks like
    .
    ├── etc
    │   ├── crontabs
    │   │   └── root
    │   ├── ddclient
    │   │   └── ddclient.conf
    │   ├── doas.d
    │   │   └── doas.conf
    │   ├── fail2ban
    │   │   ├── filter.d
    │   │   │   └── alpine-sshd-key.conf
    │   │   └── jail.d
    │   │       └── alpine-ssh.conf
    │   ├── modprobe.d
    │   │   ├── backlist-extra.conf
    │   │   └── disable-filesystems.conf
    │   ├── network
    │   │   └── interfaces
    │   ├── periodic
    │   │   └── 1min
    │   │       └── dynamic-motd
    │   ├── profile.d
    │   │   └── profile.sh
    │   ├── ssh
    │   │   └── sshd_config
    │   ├── wpa_supplicant
    │   │   └── wpa_supplicant.conf
    │   ├── fstab
    │   ├── nanorc
    │   ├── profile
    │   └── sysctl.conf
    ├── home
    │   └── pi-user
    │       ├── .config
    │       │   └── ash
    │       │       ├── ashrc
    │       │       └── profile
    │       ├── .ssh
    │       │   └── authorized_keys
    │       ├── .sync
    │       │   ├── file-system-backup
    │       │   │   ├── .sync-server-fs_01_root
    │       │   │   └── .sync-server-fs_02_boot
    │       │   └── .sync-caddy_certs_backup
    │       ├── .nanorc
    │       └── .tmux.conf
    ├── root
    │   ├── .config
    │   │   └── mc
    │   │       └── ini
    │   ├── .local
    │   │   └── share
    │   │       └── mc
    │   │           └── history -> /dev/null
    │   ├── .ssh
    │   │   └── authorized_keys
    │   ├── scripts
    │   │   ├── automated-backup
    │   │   └── maintenance
    │   ├── .ash_history -> /dev/null
    │   └── .nanorc
    ├── srv
    │   ├── caddy
    │   │   ├── Caddyfile
    │   │   ├── Dockerfile
    │   │   └── docker-compose.yml
    │   └── kiwix
    │       └── docker-compose.yml
    └── usr
        └── sbin
            ├── containers-down
            ├── containers-up
            ├── emountman
            ├── fs-backup-quick
            └── rtransfer
    

    This is useful to me because I can keep track of every change I make. I even have it set up so I can use rsync to quickly chuck all the files into place after a fresh install or after adding/modifying files.

    I also created and maintain a “quick install” guide so I can install a fresh OS, rsync all the modified files from my skeleton file tree into place, then run through all the commands in my quick install guide to get myself back to the same state in a minimal amount of time.