
ΠΑΡΑΡΤΗΜΑ Α
📚 ΠΑΡΑΡΤΗΜΑ Α: ΣΥΝΟΨΗ ΕΝΤΟΛΩΝ ΥΛΟΠΟΙΗΣΗΣ ΥΠΟΔΟΜΗΣ
Η παρούσα ενότητα εξυπηρετεί ως αναλυτικός οδηγός αναπαραγωγής (reproducibility guide) της υποδομής του πειραματικού εργαστηρίου (LAB-Thesis-UTH) που αναπτύχθηκε για το MyThesis. Παρατίθενται κατά χρονολογική σειρά και με αναλυτικά σχόλια όλες οι εντολές (commands) που εκτελέστηκαν στο περιβάλλον Linux Server για την προετοιμασία του κεντρικού συστήματος (Host) και την εγκατάσταση των απαραίτητων εργαλείων. Η οργάνωση των εντολών σε διακριτές ομάδες (π.χ., Προετοιμασία Υποδομής, Βοηθητικό Λογισμικό, Υποδομή Εικονικοποίησης) διευκολύνει την παρακολούθηση της διαδικασίας. Οι κρίσιμες ενέργειες περιλαμβάνουν την εγκατάσταση του Webmin και των εργαλείων παρακολούθησης Glances και Fastfetch, καθώς και την πλήρη εγκατάσταση, διαμόρφωση και ενεργοποίηση του LXD (Linux Containers Daemon) για τη δημιουργία της πειραματικής πλατφόρμας. Ο οδηγός αυτός διασφαλίζει ότι οποιοσδήποτε ενδιαφερόμενος μπορεί να επαναλάβει το πείραμα και να επαληθεύσει τα αποτελέσματα της εργασίας στο συγκεκριμένο lab περιβάλλον. 💻
Α.1. Προετοιμασία Υποδομής
Εντολή 1: Σύνδεση με SSH
ssh labrat@192.168.1.159
Εντολή 2: Ενημέρωση Συστήματος
sudo apt update -y
sudo apt dist-upgrade -y
Εντολή 3: Έλεγχος Κατάστασης Firewall
sudo ufw status verbose
Εντολή 4: Άνοιγμα Πόρτας 10000 (Webmin) και Επιβεβαίωση
sudo ufw allow 10000 comment 'Webmin, Εφαρμογή πρόσβασης στο Server lab μέσω web interface'
sudo ufw status verbose
Εντολή 5: Εγκατάσταση Webmin
sudo curl -o webmin-setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repos.sh
sudo sh webmin-setup-repos.sh
sudo apt-get install webmin --install-recommends -y
Εντολή 6: Επιβεβαίωση Λειτουργίας Webmin
systemctl status webmin
Α.2. Βοηθητικό Λογισμικό
Οι ακόλουθες εντολές πρέπει να εκτελεστούν στο Τερματικό του κεντρικού συστήματος με δικαιώματα διαχειριστή, ακολουθώντας την ιεράρχηση της πειραματικής ροής.
Ομάδα Εντολών 1: Βοηθήματα Μεταφοράς και Συγχρονισμού (Προαπαιτούμενα Πειραματισμού)
# Εγκατάσταση του Wget (για μη-διαδραστική λήψη αρχείων)
sudo apt install wget -y
# Εγκατάσταση του Curl (για μεταφορά δεδομένων μέσω URL)
sudo apt install curl -y
# Εγκατάσταση του Rsync (για αποδοτικό συγχρονισμό αρχείων)
sudo apt install rsync -y
# Εναλλακτικά, πραγματοποιήστε την εγκατάσταση όλων σε μια ενιαία εντολή:
sudo apt install wget curl rsync -y
Ομάδα Εντολών 2: Εργαλεία Εποπτείας και Πληροφόρησης (Επαλήθευση Πόρων)
Εγκατάσταση του Fastfetch (για βασικές πληροφορίες συστήματος)
# Προσθήκη του PPA (Personal Package Archive) για την εφαρμογή Fastfetch. sudo add-apt-repository ppa:zhangsongcui3371/fastfetch # Ενημέρωση της λίστας των πακέτων του συστήματος. sudo apt update # Εγκατάσταση του Fastfetch. sudo apt install fastfetch # Εναλλακτικά, πραγματοποιήστε όλες τις ενέργειες (εκτός της ενημέρωσης) σε μια ενιαία εντολή: sudo add-apt-repository ppa:zhangsongcui3371/fastfetch && sudo apt update && sudo apt install fastfetch -yΕγκατάσταση του Glances (για Real-Time Monitoring)
# Εγκατάσταση βασικών εξαρτήσεων: python3, python3-pip, python3-dev, python3-docker, gcc, lm-sensors, wireless-tools sudo apt install python3 python3-pip python3-dev python3-docker gcc lm-sensors wireless-tools -y # Εγκατάσταση του Pipx. sudo apt install pipx -y # Εγκατάσταση του Glances και όλων των προαιρετικών εξαρτήσεων του. sudo pipx install 'glances[all]' # Προσθήκη του φακέλου των εκτελέσιμων αρχείων του Pipx στη μεταβλητή PATH. sudo pipx ensurepath # Φόρτωση των νέων ρυθμίσεων της μεταβλητής PATH στο τρέχον session του τερματικού. source ~/.bashrc # Επιβεβαίωση της επιτυχούς εγκατάστασης και εμφάνισης της έκδοσης του Glances. glances -V# Εντοπισμός της ακριβούς διαδρομής όπου είναι εγκατεστημένο το εκτελέσιμο αρχείο του Glances. which glances # Δημιουργία συμβολικού συνδέσμου (symlink) για σωστή λειτουργία ως υπηρεσία. sudo ln ~/.local/bin/glances /usr/local/bin/ # Δημιουργία και επεξεργασία του αρχείου υπηρεσίας (glances.service) του Glances για το Systemd. sudo nano /etc/systemd/system/glances.service- Περιεχόμενο αρχείου glances
[Unit] # Περιγραφή της υπηρεσίας. Description=Glances System Monitoring Tool # Εξασφαλίζει ότι η υπηρεσία θα ξεκινήσει αφού έχει εκκινηθεί το δίκτυο. After=network.target [Service] # Προσοχή: Η διαδρομή ExecStart πρέπει να προσαρμοστεί στην πραγματική θέση # του εκτελέσιμου αρχείου 'glances' που εντοπίστηκε με την εντολή 'which glances'. ExecStart=/usr/local/bin/glances -w -t 5 # Ορίζει τον χρήστη υπό τον οποίο θα τρέχει η υπηρεσία. User=root # Ορισμός της Πολιτικής Επανεκκίνησης. Restart=on-failure [Install] # Ορίζει ότι η υπηρεσία πρέπει να εκκινείται όταν το σύστημα φτάσει στο επίπεδο multi-user.target. WantedBy=multi-user.target- Reload Daemon
# Επαναφόρτωση της ρύθμισης του Systemd για να αναγνωρίσει τις αλλαγές στο glances.service. sudo systemctl daemon-reload- Εκκίνηση υπηρεσιών
# Ενεργοποίηση της υπηρεσίας Glances για αυτόματη εκκίνηση σε κάθε boot. sudo systemctl enable glances.service # Άμεση εκκίνηση της υπηρεσίας Glances Web Server. sudo systemctl start glances.service # Έλεγχος της κατάστασης της υπηρεσίας. sudo systemctl status glances.service- Κανόνες firewall
# Άνοιγμα της θύρας (Port) 61208 στο Firewall (UFW) για πρόσβαση στο Web Interface. sudo ufw allow 61208 comment 'Glances | Web interface system monitoring'
Α.3. Υποδομή Εικονικοποίησης (Πλατφόρμα Πειραμάτων)
# Βασική εντολή εγκατάστασης του LXD (Yποδομής)
sudo snap install lxd
# Προσθήκη του χρήστη στο group lxd και φόρτωση του νέου group (Απαραίτητο για δικαιώματα)
getent group lxd | grep -qwF "$USER" || sudo usermod -aG lxd "$USER"
newgrp lxd
# Ενεργοποίηση του ενσωματωμένου Web UI
sudo snap set lxd ui.enable=true
# Επανεκκίνηση LXD για να φορτώσει το UI
sudo snap restart --reload lxd
# Ρύθμιση του LXD να ακούει σε ασφαλές HTTPS στη θύρα 8443
sudo lxc config set core.https_address :8443
# Άνοιγμα της θύρας 8443 στο Firewall, ενημέρωση κανόνων (ΑΠΑΡΑΙΤΗΤΟ)
sudo ufw allow 8443/tcp
# Εφαρμογή των αλλαγών στο Firewall
sudo ufw reload
Α.4. Αυτοματοποιημένου Backup Τοποθεσίς του Έργου (bck-lcl)
#!/bin/bash
# Script: bck-lcl (Local, Remote & 10-Day Retention Backup)
# ====================================================================
# Ορισμός ΑΠΟΛΥΤΩΝ Διαδρομών και Μεταβλητών
# ====================================================================
PROJECT_HOME="/home/digilady/Vuepress/MyThesis"
BACKUP_DIR="/home/digilady/VueBackups"
OWNER_USER="digilady"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILENAME="mythesis_src_backup_$TIMESTAMP.tar.gz"
# ΡΥΘΜΙΣΕΙΣ FILE SERVER (SAMBA)
REMOTE_USER="digilady"
REMOTE_HOST="10.11.100.102"
REMOTE_PORT="2003"
REMOTE_PATH="/srv/VPBackup"
RETENTION_DAYS=10
SSH_KEY_PATH="/root/.ssh/id_rsa"
# 2. ΚΑΘΑΡΙΣΜΟΣ CACHE & TEMP (Πριν τη συμπίεση)
rm -rf "$PROJECT_HOME/node_modules/.cache" 2>/dev/null
rm -rf "$PROJECT_HOME/.vuepress/.cache" 2>/dev/null
rm -rf "$PROJECT_HOME/.vuepress/temp" 2>/dev/null
rm -rf "$PROJECT_HOME/dist" 2>/dev/null
# 3. ΔΗΜΙΟΥΡΓΙΑ ΤΟΠΙΚΟΥ BACKUP
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/$BACKUP_FILENAME" -C "$PROJECT_HOME" "src"
if [ $? -ne 0 ]; then
echo "ΣΦΑΛΜΑ: Η δημιουργία τοπικού backup απέτυχε."
exit 1
fi
# 4. ΑΠΟΜΑΚΡΥΣΜΕΝΗ ΜΕΤΑΦΟΡΑ (RSYNC ΣΕ SAMBA SERVER)
# ΔΗΜΙΟΥΡΓΙΑ ΦΑΚΕΛΟΥ: Χρησιμοποιεί ρητά το κλειδί
ssh -i "$SSH_KEY_PATH" -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_PATH"
# RSYNC: Μεταφορά με ρητό ορισμό του κλειδιού
rsync -avz \
-e "ssh -i $SSH_KEY_PATH -p $REMOTE_PORT" \
"$BACKUP_DIR/$BACKUP_FILENAME" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
# 5. ΚΑΘΑΡΙΣΜΟΣ ΠΑΛΑΙΩΝ ΤΟΠΙΚΩΝ BACKUPS (10 ΗΜΕΡΕΣ)
find "$BACKUP_DIR" -type f -name '*.tar.gz' -mtime +$RETENTION_DAYS -delete
# 6. ΕΠΑΝΑΦΟΡΑ ΙΔΙΟΚΤΗΣΙΑΣ (Chown)
chown -R $OWNER_USER:$OWNER_USER "$PROJECT_HOME" "$BACKUP_DIR"
exit 0
Α.5 Αυτοματοποιημένη Εκτέλεση Αντιγράφου της Θέσης Παραγωγής κατά την Εκκίνηση του Συστήματος
#!/bin/bash
# Script: bck-startup (Minimal Source Code Backup on Boot)
# ====================================================================
# Ορισμός ΑΠΟΛΥΤΩΝ Διαδρομών και Μεταβλητών
# ====================================================================
PROJECT_HOME="/home/digilady/Vuepress/MyThesis"
BACKUP_DIR="/home/digilady/VueBackups/Startup" # Ξεχωριστός φάκελος για τα startup backups
OWNER_USER="digilady"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILENAME="mythesis_src_startup_$TIMESTAMP.tar.gz"
# ΡΥΘΜΙΣΕΙΣ FILE SERVER
REMOTE_USER="digilady"
REMOTE_HOST="10.11.100.102"
REMOTE_PORT="2003"
REMOTE_PATH="/srv/VPBackup/Startup" # Ξεχωριστός φάκελος στον File Server
SSH_KEY_PATH="/root/.ssh/id_rsa"
# 1. ΔΗΜΙΟΥΡΓΙΑ ΤΟΠΙΚΟΥ BACKUP (Μόνο src)
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/$BACKUP_FILENAME" -C "$PROJECT_HOME" "src"
if [ $? -ne 0 ]; then
# Αν αποτύχει η δημιουργία, απλά τερματίζουμε
exit 1
fi
# 2. ΑΠΟΜΑΚΡΥΣΜΕΝΗ ΜΕΤΑΦΟΡΑ (RSYNC)
# Δημιουργία απομακρυσμένου φακέλου
ssh -i "$SSH_KEY_PATH" -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_PATH"
# RSYNC: Μεταφορά με ρητό ορισμό του κλειδιού
rsync -avz --remove-source-files \
-e "ssh -i $SSH_KEY_PATH -p $REMOTE_PORT" \
"$BACKUP_DIR/$BACKUP_FILENAME" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
# 3. ΕΠΑΝΑΦΟΡΑ ΙΔΙΟΚΤΗΣΙΑΣ (Chown)
chown -R $OWNER_USER:$OWNER_USER "$PROJECT_HOME" "$BACKUP_DIR"
exit 0
Α.6 Εκκίνηση Διακομιστή Ανάπτυξης Aνεξαρτήτως του Τρέχοντος Καταλόγου Εργασίας
#!/bin/bash
#====================================================
# Script: Εκκίνηση Διακομιστή Ανάπτυξης
# Σκοπός: Ενεργοποιεί τον τοπικό διακομιστή ανάπτυξης για το έργο.
# Χαρακτηριστικά: Εκτελείται ανεξαρτήτως του τρέχοντος καταλόγου εργασίας.
#====================================================
# Μετάβαση στον κατάλογο του project
cd /home/digilady/Vuepress/MyThesis
# Εκτέλεση του script που καθαρίζει την cache και όλα τα προσωρινά αρχεία
# Εκκινεί στη συνέχεια τον διακομιστή ανάπτυξης.
npm run docs:clean-dev
Α.7 Αυτόματη Δημοσίευση VuePress
#!/bin/bash
#====================================================
# Script: Αυτόματη Δημοσίευση VuePress
# Σκοπός: Αυτοματοποιημένη διαδικασία δημοσίευσης ενός ιστότοπου VuePress σε έναν τοπικό web server.
# Λειτουργίες:
# - Δημιουργεί την τελική στατική έκδοση (build) του project.
# - Συγχρονίζει τον φάκελο παραγωγής με τον φάκελο του web server.
# - Ρυθμίζει τα δικαιώματα αρχείων για σωστή λειτουργία.
# Η εντολή έχει συμβολικό σύνδεσμο (symbolic link) στο /bin με όνομα _bvu_
#====================================================
# Μετακίνηση στον κατάλογο του Vuepress project
cd /home/digilady/Vuepress/MyThesis
# Εκτέλεση του build για τη δημιουργία της τελικής έκδοσης του ιστότοπου
npm run docs:build
# Αλλαγή της ιδιοκτησίας του φακέλου παραγωγής στον χρήστη uservice
sudo chown digilady:digilady -R /home/digilady/Vuepress/MyThesis/src/.vuepress/dist
# Διαγραφή προσωρινών αρχείων και cache για καθαρό build
sudo rm -rf /home/digilady/Vuepress/MyThesis/src/.vuepress/.cache /home/digilady/Vuepress/MyThesis/src/.vuepress/.temp