rbn.am

Ruben's Blog | ีŒีธึ‚ีขีฅีถีซ ิฒีฌีธีฃีจ

๐Ÿ”™ ..

Configuring own homebrew server - part 1: Arch Linux, Networking, and Data Syncing ๐Ÿง

After three long years of loyalty to CentOS, the time had finally come to shake things up and introduce Arch Linux to the server. Armed with determination and a USB cable, I faced the challenge of connecting my phone to the server, since I didn’t have a LAN cable and monitor in the same location. An unconventional setup, indeed! ๐Ÿ˜…๐Ÿ“ฑ๐Ÿ’ป

Following this guide for installation for Arch Linux. https://www.youtube.com/watch?v=G-mLyrHonvU

Encountered an issue, that was fixed here https://github.com/archlinux/archinstall/issues/1810#issuecomment-1545235595

After installation update the packages pacman -Syy. install dependencies for our setup server pacman -S openssh net-tools rsync git fish

Add to the end of visudo /etc/sudoers to stop asking password for sudo every time.

Manual server network configuration

ip address add MY_STATIC_IP/255.255.255.0 dev enp4s0
ip route add default via MY_GATEWAY dev enp4s0

Automated /etc/systemd/network/20-ethernet.network

[Match]
Name=enp4s0

[Network]
Address=MY_STATIC_IP/24
Gateway=MY_GATEWAY

Where enp4s0 is the name of your network interface.

SSH

Enable ssh service.

systemctl start sshd
systemctl enable sshd

Copying key to ssh to the server.

ssh-copy-id user@MY_SERVER_IP

Testing ssh connection.

ssh user@MY_SERVER_IP

As this server is accessible through internet I have disabled password on ssh part to improve security๐Ÿ’พ๐Ÿ”’โœจ by adding to this file /etc/ssh/sshd_config

PasswordAuthentication no

Fish is the ๐Ÿ  coolest shell around! To make it the default shell for any user, simply run this command:

chsh -s $(which fish)

disc and sync

In this concise guide, we’ll explore a simple yet effective method for backing up your data using the power of rsync. By following the advice of norayr, we’ll configure a backup solution that provides peace of mind without the complexity of RAID. I have 2 disc configuration for my data storage except for my OS drive. Let’s get started and secure your precious data! ๐Ÿ’ช๐Ÿ’พ

Let’s list all connected devices

lsblk -f

Output

NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                           
โ”œโ”€sda1 vfat   FAT32       C8B9-F37C                             451.9M    11% /boot
โ””โ”€sda2 ext4   1.0         9aa35d6f-d7b8-446a-a070-5ca6e252aeb5  218.9G     1% /
sdb                                                                           
โ””โ”€sdb1 xfs                a9ce21d2-a8f8-403a-a583-997aacb1f68f                
sdc                                                                           
โ””โ”€sdc1 xfs                7ca56d73-fc0a-4fb1-a1d5-6816123fac4d                 
zram0                                                                         [SWAP]

In my case SDB and SDC are drives I want to “RAID”. They are already formatted and are using xfs as their filesystem.

Creating directories for disks.

mkdir /disk0 && mkdir /disk1

Mounting disks to directories on startup by adding nano /etc/fstab

    UUID=a9ce21d2-a8f8-403a-a583-997aacb1f68f /disk1     xfs   defaults  0      0
    UUID=7ca56d73-fc0a-4fb1-a1d5-6816123fac4d /disk0     xfs   defaults  0      0

Reboot the system and make sure the disks are in place.

sync

This is our GEM ๐Ÿ’Ž, we will create a script that runs once a day syncing one disk to the other.

First create sync scrypt. nano /root/bin/sync.sh

#!/bin/bash

rsync -avh /disk0/ /disk1/ --delete-after > /tmp/cron.log 2>&1

Make it executable.

chmod +x /root/bin/sync.sh

systemd

Now we are going to create a systemd timer

Initially we need to create the service which will run our script. nano /etc/systemd/system/rsync.service

[Unit]
Description=Rsync for synchronizing Disk0 with Disk1

[Service]
ExecStart=/root/bin/sync.sh

We need to create the timer to run once every day to sync our data by nano /etc/systemd/system/rsync.timer

[Unit]
Description=Rsync service timer

[Timer]
OnCalendar=daily
AccuracySec=12h

[Install]
WantedBy=timers.target

All logs for the script output can be fount at /tmp/cron.log.

Phew! ๐Ÿฅต That was a ton of work, but I’ve finally got it all sorted out. Stay tuned for my upcoming blog post where I spill the beans on how I’ve set up my homemade server. ๐Ÿ’ช๐Ÿ ๐Ÿ˜‰


Please give me feedback, comment on whatever you think about my blog post, and help me improve. โค๏ธ

Blog Menu