Καλησπέρα, τώρα είδατε νέα δημοσίευση μου και μάλλον αναρωτήθηκατε τι ανέβασα πάλι… Λοιπόν έφτιαξα ένα σκριπτ το οποίο φτιάχνει bootable usbs. Τρέχει σε Ubuntu-Debian based διανομές. Το σκριπτ το έχω δημοσιεύσει στο github καθώς έφτιαξα μια δικιά του ιστοσελίδα πιο φιλική. * Άνοιξα Twitter όπου θα μπορείτε να βλέπετε τις νέες εκδόσεις σχετικά με τα προγράμματα μου! @Karapatakis106
Θαυμάζω το μεράκι που βάζεις στα projects σου. Ωστόσο δεν έχω καταλάβει πως δουλεύει καθώς και είναι επικίνδυνο γιατί μπορεί κάποιος κατά λάθος να γράψει σε κανονικό σκληρό δίσκο.
Επίσης είναι προτιμότερο να βάζεις το github
και να προτείνεις εκεί πως να το εγκαταστήσει και να το τρέξει κάποιος.
Πως θα διαλέξω drive αν δεν έχω USB drive τοποθετημένο;
Επίσης κάνεις χρήση της read αλλά δε διευκρινίζεις ποια θα είναι η μορφή της επιλογής που θέλει να δώσει ο χρήστης.
Τέλος αφού ζητάς δικαιώματα διαχειριστή να μπλοκάρεις από την αρχή το πρόγραμμα αν δεν τρέχει με αυτά.
Να προγραμματίζεις σαν να έχεις απέναντι σου έναν αδαή 50άρη.
Εαν δεις καποιο link που να ξεκιναει με USB ειναι κατα πασα πιθανοτητα τo στικακι σου ή ο εξωτερικος σου δισκος.
Εαν δεις αλλες εγγραφες ή εγγραφες που ξεκινουν με ata ειναι ή οι εσωτερικο σου δισκοι ή το CD/DVD που μπορει να εχει ο υπολογιστης σου.
Συμφωνα με αυτες τις πληροφοριες μπορεις να κανεις το σκριπτακι σου να βγαζει μυνηματα που να λενε στον χρηστη… πχ … Δεν υπαρχει συσκευη USB που να μπορεσω να γραψω. Σταματαω εδω. Ξαναεκτελεσε με αφου συνδεσεις ενα USB Thumbdrive ή εναν USB εξωτερικο δισκο.
Σαν bonus μπορεις να παρεις (με λιγο parsing) και το path που εχει δωσει το συστημα στο στικακι σου.
ΠΧ στο παραδειγμα μου το στικακι μου ειναι στο /dev/sdc (λογω του οτι εχω δυο δισκους στο laptop).
Και ετσι ο χρηστης δεν χρειαζεται να κινηγαει να βρει εαν ειναι συνδεδεμενο και που το στικακι του.
Ελπιζω να βοηθησα
Update: Επηδει με επιασε λιγο το μερακι και μενα Εαν χρησιμοποιησεις την παρακατω εντολη:
ls -la /dev/disk/by-id/ | grep "usb-" | grep -w "sd[b-z]"
και εχεις δυο USB στικακια ή εξωτερικους δισκους θα σου διξει μονο τις πρωτες γραμμες και οχι τις υπολοιπες με τα partitions. Ενδεικτικα το αποτελεσμα θα ειναι παρομοιο με το παρακατω:
Ετσι ειναι πιο ευκολο να βαλεις αυτο το αποτελεσμα σε ενα array και να το επεξεργαστεις οπως θες (ισως αυτοματοποιοντας την επιλογη για το USΒ στικακι του καθε χρηστη λιγο παραπανω κανοντας το σκριπτακι σου λιγο πιο ευκολο στην χρηση).
Μη βιάζεσαι να βγάλεις τα script σου. Πειραματίσου, βρες τα όποια λάθη, διόρθωσε τα και στο τέλος βγάλε την όποια έκδοση. Ότι έχω δοκιμάσει δικό σου ή δε δούλευε ή δεν κατάλαβα τι έπρεπε να κάνω.
Ο προγραμματισμός δεν είναι μόνο μια συστοιχία εντολών, αλλά η υλοποίηση μιας μεθόδου με τη βοήθεια εντολών.
Σου παραθέτω μια δική μου μέθοδο που είναι αρκετά safe
#!/bin/bash
# Έλεγχος αν είμαστε root
if [ "$EUID" -ne 0 ]
then echo "Απαιτούνται δικαιώματα υπερχρήστη"
exit
fi
# Έλεγχος αν υπάρχει USB στικ, αν υπάρχει το δείχνει
for usb_device in /sys/block/*
do
if [[ $(sudo readlink "$usb_device" | grep -o usb) == "usb" ]]; then
echo "/dev/""${usb_device:(11)}"
usbpresent=1
else
continue
fi
done
# Συνάρτηση που τρέχει μόνο αν ανιχνευθεί USB stick
diskchooser() {
while true
do
read -rp "Διάλεξε ένα δίσκο : " disk
if [[ $disk != *"/dev/sd"[a-z]* ]]
then
echo "Ο δίσκος πρέπει να είναι της μορφής /dev/sdx"
else
echo "Διάλεξες τον $disk"
break
fi
done
}
# Αν υπάρχει στικάκι καλείται η συνάρτηση, αλλιώς τερματίζει το πρόγραμμα
if [[ $usbpresent -eq 1 ]]; then
diskchooser
else
echo "Δεν υπάρχει συσκευή USB τοποθετημένη"
exit 0
fi
Σε αυτό το απλό script βλέπεις μια λογική σκέψη που αποτυπώνεται σε γραμμές κώδικα. Δεν είναι τέλεια προφανώς αλλά δείχνει κατά τη γνώμη μου πως πρέπει να κινηθείς.
Μη βιαστείς να αντιγράψεις τον κώδικα, μελέτησε τον και ενσωμάτωσε τον μόνο όταν καταλάβεις πλήρως τι κάνει.
Γίνε πιο περιγραφικός, δεν καταλαβαίνω τι εννοείς. Έχω γράψει ολόκληρη σειρά άρθρων για το bash scripting, μπορείς να ανατρέξεις και για τις όποιες απορίες έχεις εδώ είμαστε.
Το γεγονός ότι γράφεις ένα script που χρησιμοποιεί το dd και το zenity θα έπρεπε να το καθιστά distro agnostic (δηλαδή να δουλεύει στη συντριπτική πλειοψηφία των διανομών).
Επίσης τα script σου έχουν μέσα λάθος εντολές. Δεν ξέρω από που τις είδες αυτές.
Είμαστε σε έναν χώρο που προάγει τη γνώση και τον ανοιχτό κώδικα. Προφανώς και μπορείς να τον χρησιμοποιήσεις ελεύθερα με την προϋπόθεση αυτό που θα δώσεις ως πρόγραμμα να είναι λειτουργικό και όχι κάτι που θα ψάχνουμε πως δουλεύει.