Mel's Projects
KDE Plasma Installation on External SSD
This project documents installing KDE Plasma on an external SSD with Ubuntu, including all trial-and-error steps, errors encountered, and solutions.
Timeline & Challenges
- Attempted initial installation on the external SSD; failed due to
/varbeing full on the internal disk. - Repartitioned manually, making the external SSD the root device (
/). - Encountered BusyBox shell with limited commands due to missing initramfs or UUID boot issues.
- Flashed Ubuntu USB correctly using a validated ISO and reinstalled.
- Successfully booted into KDE Plasma on the external SSD.
- Configured NVIDIA drivers; resolved GUI scaling issues (640x480 → proper resolution) and refresh rate defaults.
Lessons Learned
- Partitioning external disks requires attention to root and swap placement.
- GRUB bootloader can fail if UUIDs mismatch or disk order changes.
- Careful logging and patience help troubleshoot kernel/initramfs errors.
- External SSD installations are portable but must be tested across reboots.
PHP & Nginx Debugging
This project documents configuring PHP 8.3 FPM with Nginx and resolving 500 Internal Server Errors caused by PHP syntax mistakes.
Problem
Initially, phpinfo.php was downloaded instead of being executed. Running the file via PHP CLI showed:
PHP Parse error: syntax error, unexpected token "<", expecting end of file
Nginx was not processing PHP files correctly due to misconfiguration.
Steps Taken
- Verified file ownership:
/var/www/html/phpinfo.phpowned bywww-data:www-data, permissions 644. - Configured
/etc/php/8.3/fpm/php.inito log errors instead of displaying them:
display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
sudo systemctl restart php8.3-fpmsudo -u www-data php /var/www/html/phpinfo.php and tail -f /var/log/php_errors.log.Outcome
- Parse errors now appear in
/var/log/php_errors.loginstead of causing 500 errors. - Configuration is safe for production: users don’t see raw PHP errors in the browser.
- Future PHP projects can leverage the same logging setup for debugging.
Example test: phpinfo.php
Samba Assignment – Virtual Machines
First VM Setup
On the first virtual machine, the goal was to create a user and share their home directory via Samba, read-only:
- Created user
smbuserwith password[Smb password]. - Installed Samba:
sudo apt update sudo apt install samba -y
- Configured
/etc/samba/smb.conf:- Home directory shared as
[First VM's IP address] - Read-only:
read only = yes - Authentication:
security = user, allowed user:valid users = smbuser
- Home directory shared as
- Restarted Samba:
sudo systemctl restart smbd
- Connection errors often caused by NAT vs. Bridged network misconfiguration in VirtualBox.
- If the shared directory was empty, double-check that
smbuserhad files in their home.
Second VM Setup
- Installed packages:
sudo apt install cifs-utils autofs -y
- Created local mount point:
sudo mkdir -p /mnt/test_smb
- Configured
/etc/auto.smbuser:smbuser -fstype=cifs,username=smbuser,password=[Smb password],ro ://[First VM's IP address]/smbuser_home
- Enabled and started autofs:
sudo systemctl enable autofs sudo systemctl start autofs
- Tested the mount:
ls /mnt/test_smb
If empty, verify connectivity:ping [First VM's IP address]
and ports:nc -zv [First VM's IP address] 445
- “key not found in map sources” errors usually indicate mismatched share name, username, or IP.
- Check that
smbclientis installed on the second VM:sudo apt install smbclient -y - Switching VirtualBox network from NAT to Bridged Adapter solved connection refusals on port 445.
Outcome
- The home directory of
smbuserfrom the first VM is now automatically mounted on the second VM via autofs. - All required authentication and permissions are functioning.
- Mount point visibility can be tested with
ls /mnt/test_smb.
Zabbix Monitoring Stack (Docker)
This project documents deploying a full Zabbix monitoring stack using Docker Compose. The goal was to understand how real infrastructure monitoring systems connect application services, databases, and web interfaces through container networking.
Stack
- Zabbix Server (Alpine container)
- Zabbix Web Interface (Nginx + PHP)
- MySQL 8.4 database
- Docker Compose networking
Deployment
The stack was launched using Docker Compose:
sudo docker compose up -d
After the containers started, the web interface became available at:
http://localhost:8080
Challenges
- Initial container networking prevented services from resolving each other.
- MySQL authentication errors blocked Zabbix from accessing its database.
- Docker Compose YAML indentation errors caused services to fail during startup.
- The web interface temporarily showed database configuration errors while initialization completed.
Outcome
- The Zabbix server successfully connects to the MySQL database.
- The web interface loads through Nginx and communicates with the backend server.
- The monitoring dashboard is accessible through the browser.
Default Login
Username: Admin Password: zabbix
This project provided hands-on experience with container orchestration, service networking, database configuration, and troubleshooting distributed systems.