Makemebootable φτιάξτε bootable USB με χρήση Terminal

Καλησπέρα, τώρα είδατε νέα δημοσίευση μου και μάλλον αναρωτήθηκατε τι ανέβασα πάλι… Λοιπόν έφτιαξα ένα σκριπτ το οποίο φτιάχνει bootable usbs. Τρέχει σε Ubuntu-Debian based διανομές. Το σκριπτ το έχω δημοσιεύσει στο github καθώς έφτιαξα μια δικιά του ιστοσελίδα πιο φιλική. * Άνοιξα Twitter όπου θα μπορείτε να βλέπετε τις νέες εκδόσεις σχετικά με τα προγράμματα μου! @Karapatakis106

Η ιστοσελίδα για το Makemebootable: https://makemebootable.weebly.com

5 Likes

Θαυμάζω το μεράκι που βάζεις στα projects σου. Ωστόσο δεν έχω καταλάβει πως δουλεύει καθώς και είναι επικίνδυνο γιατί μπορεί κάποιος κατά λάθος να γράψει σε κανονικό σκληρό δίσκο.

Επίσης είναι προτιμότερο να βάζεις το github


και να προτείνεις εκεί πως να το εγκαταστήσει και να το τρέξει κάποιος.

Μα ούτως ή άλλως στο script το έχω επισημάνει (αν δε κάνω λάθος)

Πως θα διαλέξω drive αν δεν έχω USB drive τοποθετημένο;
Επίσης κάνεις χρήση της read αλλά δε διευκρινίζεις ποια θα είναι η μορφή της επιλογής που θέλει να δώσει ο χρήστης.
Τέλος αφού ζητάς δικαιώματα διαχειριστή να μπλοκάρεις από την αρχή το πρόγραμμα αν δεν τρέχει με αυτά.

Να προγραμματίζεις σαν να έχεις απέναντι σου έναν αδαή 50άρη.

2 Likes

Όλα θέλουν υπομονή… Το official release 11.20 περιλαμβάνει περισσότερα συμπεριλαμβανομένων και μερικά που είπατε…

Ωραία, κυκλοφόρησε την να σου κάνω μερικα pull requests :wink:

Μάλλον αύριο θα είναι έτοιμη :smiley:

1 Like

Αυτο ισως ειναι κατι για την εκδοση v12.20.

Μπορεις να δεις αν ενα USB στικακι η USΒ εξωτερικος δισκος ειναι συνδεδεμενος. Ριχνεις μια ματια στο /dev/disk/by-id/ με την εντολη ls… πχ:

ls -la /dev/disk/by-id/

λογικα θα δεις κατι παροποιο σαν και αυτο εδω (τα δεδομενα ειναι απο το δικο μου laptop):

lrwxrwxrwx 1 root root   9 Nov 15 14:26 ata-ADATA_SU800_2J1520160833 -> ../../sda
lrwxrwxrwx 1 root root  10 Nov 15 14:26 ata-ADATA_SU800_2J1520160833-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Nov 15 14:26 ata-ADATA_SU800_2J1520160833-part2 -> ../../sda2
lrwxrwxrwx 1 root root  10 Nov 15 14:26 ata-ADATA_SU800_2J1520160833-part3 -> ../../sda3
lrwxrwxrwx 1 root root   9 Nov 15 14:26 ata-hp_BD_CMB_UJ162_WP94_071815 -> ../../sr0
lrwxrwxrwx 1 root root   9 Nov 15 14:26 ata-ST1000LM024_HN-M101MBB_S31LJ9EDC04616 -> ../../sdb
lrwxrwxrwx 1 root root  10 Nov 15 14:26 ata-ST1000LM024_HN-M101MBB_S31LJ9EDC04616-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  10 Nov 15 14:26 dm-name-LapDOS--vg-root -> ../../dm-0
lrwxrwxrwx 1 root root  10 Nov 15 14:26 dm-name-LapDOS--vg-swap_1 -> ../../dm-1
lrwxrwxrwx 1 root root  10 Nov 15 14:26 dm-uuid-LVM-CLmnFyYmKntpZdGYnJ29eC3z4MsuNLGddXV3lDHKAItMq3ZtMauaQdE8pYvavrMk -> ../../dm-1
lrwxrwxrwx 1 root root  10 Nov 15 14:26 dm-uuid-LVM-CLmnFyYmKntpZdGYnJ29eC3z4MsuNLGdFeFBxC4Wz9LBnGw2EfWd9SGVaC6KXKoU -> ../../dm-0
lrwxrwxrwx 1 root root  10 Nov 15 14:26 lvm-pv-uuid-xYbEsX-xRyR-oMHJ-Ndsc-SUxp-X3rG-FbvjcR -> ../../sda3
lrwxrwxrwx 1 root root   9 Nov 15 16:05 usb-_USB_DISK_2.0_070B26A2A35D3224-0:0 -> ../../sdc
lrwxrwxrwx 1 root root  10 Nov 15 16:05 usb-_USB_DISK_2.0_070B26A2A35D3224-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root   9 Nov 15 14:26 wwn-0x50004cf20c19c9d8 -> ../../sdb
lrwxrwxrwx 1 root root  10 Nov 15 14:26 wwn-0x50004cf20c19c9d8-part1 -> ../../sdb1
lrwxrwxrwx 1 root root   9 Nov 15 14:26 wwn-0x5707c181007a3cc5 -> ../../sda
lrwxrwxrwx 1 root root  10 Nov 15 14:26 wwn-0x5707c181007a3cc5-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Nov 15 14:26 wwn-0x5707c181007a3cc5-part2 -> ../../sda2
lrwxrwxrwx 1 root root  10 Nov 15 14:26 wwn-0x5707c181007a3cc5-part3 -> ../../sda3

Εαν δεις καποιο link που να ξεκιναει με USB ειναι κατα πασα πιθανοτητα τo στικακι σου ή ο εξωτερικος σου δισκος.

Εαν δεις αλλες εγγραφες ή εγγραφες που ξεκινουν με ata ειναι ή οι εσωτερικο σου δισκοι ή το CD/DVD που μπορει να εχει ο υπολογιστης σου.

Συμφωνα με αυτες τις πληροφοριες μπορεις να κανεις το σκριπτακι σου να βγαζει μυνηματα που να λενε στον χρηστη… πχ … Δεν υπαρχει συσκευη USB που να μπορεσω να γραψω. Σταματαω εδω. Ξαναεκτελεσε με αφου συνδεσεις ενα USB Thumbdrive ή εναν USB εξωτερικο δισκο.

Σαν bonus μπορεις να παρεις (με λιγο parsing) και το path που εχει δωσει το συστημα στο στικακι σου.
ΠΧ στο παραδειγμα μου το στικακι μου ειναι στο /dev/sdc (λογω του οτι εχω δυο δισκους στο laptop).
Και ετσι ο χρηστης δεν χρειαζεται να κινηγαει να βρει εαν ειναι συνδεδεμενο και που το στικακι του.

Ελπιζω να βοηθησα :slight_smile:

Update: Επηδει με επιασε λιγο το μερακι και μενα :slight_smile: Εαν χρησιμοποιησεις την παρακατω εντολη:

ls -la /dev/disk/by-id/ | grep "usb-" | grep -w "sd[b-z]"

και εχεις δυο USB στικακια ή εξωτερικους δισκους θα σου διξει μονο τις πρωτες γραμμες και οχι τις υπολοιπες με τα partitions. Ενδεικτικα το αποτελεσμα θα ειναι παρομοιο με το παρακατω:

lrwxrwxrwx 1 root root   9 Nov 15 20:18 usb-Maxell_USB_Flash_Drive_1783ad41ceb47e-0:0 -> ../../sdc
lrwxrwxrwx 1 root root   9 Nov 15 20:18 usb-_USB_DISK_2.0_070B26A2A35D3224-0:0 -> ../../sdd

Ετσι ειναι πιο ευκολο να βαλεις αυτο το αποτελεσμα σε ενα array και να το επεξεργαστεις οπως θες (ισως αυτοματοποιοντας την επιλογη για το USΒ στικακι του καθε χρηστη λιγο παραπανω κανοντας το σκριπτακι σου λιγο πιο ευκολο στην χρηση).

Και παλι ελπιζω να βοηθησα :slight_smile:

2 Likes

Βοήθησες παρά πολύ. Την τελευταία εντολή που έγραψες την ενσωματωποιησα στο σκριπτ ως αντικαταστάτη του

fdisk -l

Βγήκε Τώρα! Στο github.

Έχουμε και λέμε

Υπάρχει δεν υπάρχει στικάκι το πρόγραμμα τρέχει, διόρθωσε το. Δε χρειάζονται 2 εκτελέσιμα για γλώσσα, βρες τρόπο να το κάνεις σε ένα.

1 Like

Έλεγξε το ξανά. Έκανα κάποιο πείραμα στον έλεγχο αν υπάρχει usb να συνεχίσει εάν όχι σταματάει. :wink:

Ναι σταματάει με μήνυμα λάθους.

Δηλαδή σταματάει όλο το σκριπτ άνευ φλασακιου?

Μη βιάζεσαι να βγάλεις τα 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 βλέπεις μια λογική σκέψη που αποτυπώνεται σε γραμμές κώδικα. Δεν είναι τέλεια προφανώς αλλά δείχνει κατά τη γνώμη μου πως πρέπει να κινηθείς.

Μη βιαστείς να αντιγράψεις τον κώδικα, μελέτησε τον και ενσωμάτωσε τον μόνο όταν καταλάβεις πλήρως τι κάνει.

1 Like

Τα variables από που υπήρχαν. Δηλαδή δεν υπάρχει αυτό: π. χ usbaddress=κάτι, κατι

Γίνε πιο περιγραφικός, δεν καταλαβαίνω τι εννοείς. Έχω γράψει ολόκληρη σειρά άρθρων για το bash scripting, μπορείς να ανατρέξεις και για τις όποιες απορίες έχεις εδώ είμαστε.

Το γεγονός ότι γράφεις ένα script που χρησιμοποιεί το dd και το zenity θα έπρεπε να το καθιστά distro agnostic (δηλαδή να δουλεύει στη συντριπτική πλειοψηφία των διανομών).

Επίσης τα script σου έχουν μέσα λάθος εντολές. Δεν ξέρω από που τις είδες αυτές.

Σχεδόν κάτι καταλαβαίνω από αυτόν το κώδικα.

Μπορώ να χρησιμοποιήσω το σκριπτακι που έγραψες?

Είμαστε σε έναν χώρο που προάγει τη γνώση και τον ανοιχτό κώδικα. Προφανώς και μπορείς να τον χρησιμοποιήσεις ελεύθερα με την προϋπόθεση αυτό που θα δώσεις ως πρόγραμμα να είναι λειτουργικό και όχι κάτι που θα ψάχνουμε πως δουλεύει.

1 Like