Liveusb stick με ubuntu.iso ΚΑΙ windows

Ξεκίνησε από alkisg, 06 Μαρ 2019, 09:09:51 ΠΜ

« προηγούμενο - επόμενο »

alkisg

Αν και υπάρχουν διάφορα προγράμματα για τη δημιουργία "all in one" sticks, δεν με ικανοποίησαν (π.χ. τα περισσότερα δεν δουλεύουν με UEFI secure boot) οπότε έφτιαξα το δικό μου:
https://github.com/alkisg/liveusb

Ακολουθώντας τις οδηγίες σ' εκείνη τη σελίδα μπορούμε να δημιουργήσουμε ένα live USB stick που να μπουτάρει Ubuntu Live CDs κατευθείαν από .iso, αλλά και Windows 10 setup αφού πρώτα έχουμε προμηθευτεί τα σχετικά αρχεία με το media creation tool της Microsoft.
Επιπρόσθετα, υποστηρίζει Network boot (iPXE) και memory test, ενώ δουλεύει και σε BIOS και σε UEFI υπολογιστές.

Έχω βάλει οδηγίες στα Αγγλικά και για Linux και για Windows, αν τις χρειάζεστε στα Ελληνικά πείτε μου.

Ειδικά για τους Πληροφορικούς των Ιωαννίνων, όποιος θέλει μπορεί να περάσει από το ΚΕΠΛΗΝΕΤ να του γράψω το τελικό USB stick (μετά την εκτέλεση όλων των βημάτων).


Yannis Siahos


Δημήτρης Γκίνης


Δημήτρης Γκίνης

Αν ο μάστορας έχει όρεξη, θέλω να ρωτήσω τα παρακάτω

Θα ήθελα να προσθέσω σε αυτό το usb stick πολυεργαλείο:
-το Hiren's BootCD PE x64 (https://www.hirensbootcd.org/files/HBCD_PE_x64.iso) αλλά και το παλιότερο Hiren's BootCD (https://yepdownload.com/download/117).
- το Antix 17.4 32bit (http://ftp.ntua.gr/pub/linux/mxlinux-iso/ANTIX/Final/antiX-17.4/antiX-17.4_386-full.iso)
Τι πρέπει να κάνω;

alkisg

Δεν τα δοκίμασα, αλλά με ένα γρήγορο googling υποθέτω τα εξής:

Τα Windows δεν περιλαμβάνουν κώδικα "ψάχνω ένα .iso και το ανοίγω και βρίσκω μέσα του τα αρχεία της εγκατάτασης".
Οπότε δεν είναι εύκολο να πετάξεις το HBCD_PE_x64.iso μέσα και να δουλέψει. Θα πρέπει να χρησιμοποιήσεις το iso to usb εργαλείο που δίνουν, να φτιάξεις ένα usb, και μετά να αντιγράψεις τα αρχεία του στο "δικό μας stick". Αλλά κατά πάσα πιθανότητα θα χρησιμοποιεί ίδια ονόματα αρχείων με το iso εγκατάστασης των win10, οπότε δεν μπορείς να βάλεις και τα δύο, είτε μόνο win10 είτε μόνο hirens.

Για το antix, αν κατάλαβα καλά βασίζεται σε debian, οπότε μπορείς (1) να το μπουτάρεις κανονικά και να κάνεις cat /proc/cmdline για να δεις τι παραμέτρους θέλει, και στη συνέχεια (2) να προσθέσεις ένα menuentry στο grub.cfg μας που να περιέχει αυτό το cmdline. Δεν είναι δύσκολο, άνοιξε το /grub/grub.cfg με έναν editor και θα το καταφέρεις. Πρόσεξε την παράμετρο "fromiso=" που θα δεις στο `cat /proc/cmdline`, να έχει το σωστό μονοπάτι για το .iso.

Δημήτρης Γκίνης

Όντως το Antix βασίζεται στο Debian (το δοκίμασα σε ένα ένα παλιό netbook, καλύτερα από το Puppylinux).

Thanks  :) :)

gidarakos

Συνεπώς Άλκη με τη χρήση του δικού σου all in one μπορούμε να στήσουμε 32bit Ubuntu σε UEFI χωρίς να χρειάζεται να ακολουθούμε τη λύση που περιγράφεις στο Εγκατάσταση 32bit Ubuntu σε UEFI; ή πρέπει να προσέξουμε κάτι άλλο, γιατί εκεί αναφέρεσαι και σε κάποια bugs του ubuntu..

alkisg

Με το δικό μου usb stick ουσιαστικά γλυτώνουμε τα βήματα 1 έως 5 εκείνου του θέματος.
Όμως το βήμα 6 είναι πάντα απαραίτητο.

Sammy Dead

Στην εντολή

echo -ne '\xeb\x58\x90' | dd conv=notrunc bs=1 count=3 of=/dev/sdx1

που διορθώνει το bug, έχω αποτέλεσμα:

dd: αδυναμία ανοίγματος του '/dev/sdb1': Άρνηση πρόσβασης

alkisg

Αν δεν είσαι ήδη root, θέλει sudo:
echo -ne '\xeb\x58\x90' | sudo dd conv=notrunc bs=1 count=3 of=/dev/sdx1

Όμως, αν έχεις ενημερωμένο Ubuntu 18.04, αυτή η εντολή δεν χρειάζεται πια, επειδή ζήτησα και έκαναν backport το σχετικό fix:
SRU: fix FAT recognition after resizing

Thanks, ενημέρωσα σχετικά και τη σελίδα στο github.

Sammy Dead

Δεν έβαζα sudo στο dd αλλά όντως δεν χρειαζόταν η εντολή, όπως είπες.  Ευχαριστώ.

Sammy Dead

Άλκη έκανα κάποιες δοκιμές και πρόσθεσα στο menu επιλογές για εκκίνηση Linux Mint x64 και Elementary OS μαζί με τα αντίστοιχα iso στον φάκελο ubuntu και δούλεψαν κανονικά. Κάνω το ίδιο με το manjaro και το kali αλλά μου βγάζει το μήνυμα που έχεις "disable secure boot" ενώ είναι απενεργοποιημένο το secure boot και τα λειτουργικά είναι 64 bit. Ένα επιπλέον στοιχείο είναι ότι όταν έφτιαξα bootable usb disk με dd για το κάθε ένα ξεχωριστά, δούλεψαν κανονικά σε efi και μπήκα στα live sessions. Ξέρεις τι μπορεί να παίζει;

alkisg

Αυτή η συνάρτηση που έχω εκεί, function ubuntu(), είναι σχεδιασμένη να μπουτάρει Ubuntu CDs.
Για άλλες διανομές τύπου Manjaro, Kali κλπ, θα έπρεπε να φτιαχτούν άλλες functions.
Δεν είναι ιδιαίτερα δύσκολο, χρειάζεται να δεις πού είναι ο kernel (vmlinuz) και το initrd.* εντός του .iso, καθώς και το /proc/cmdline αφού έχει εκκινηθεί το live cd.
Αλλά δεν έχω χρόνο να κοιτάξω κάθε διανομή πού τα έχει και να φτιάξω αντίστοιχες functions.
Αν όμως κάποιος έχει όρεξη να το κάνει, δεν έχω αντίρρηση να τις προσθέσω στο github για να είναι όλα σε μία μεριά.

Sammy Dead

ξεκίνησα μια προσπάθεια. δεν καταλαβαίνω γιατί ψάχνεις το vmlinuz και το initrd με πολλα ονόματα. for vmlinuz in κλπ κλπ

alkisg

Επειδή το Ubuntu τα άλλαζε κάθε τρεις και λίγο. Οπότε άλλο δουλεύει σε 18.04, άλλο σε 10.04, άλλο σε 64bit/UEFI, άλλο σε 32bit/BIOS κλπ.

Sammy Dead

Άλκη αποτυχημένες οι προσπάθειες. Θα βάλω παρακάτω δύο απαντήσεις με τον κώδικα των συναρτήσεων (η αλήθεια είναι ότι δεν ξέρω τη γλώσσα αυτή του grub οπότε για αυτό βλέπεις χάλια κώδικα του τύπου for ... in [μια μόνο επιλογή]), το /proc/cmdline και τα αποτελέσματα κατά την εκκίνηση. Είναι για manjaro (arch based, ελαφρύ και user friendly) και kali, γνωστή διανομή για penetration testing κλπ

Sammy Dead

Manjaro

function manjaro {
  iname=$1   

  save_default
  if ! loopback loop "$liveusb/other/$iname"; then
    return 1
  fi
  # Don't use regexp, it's not available when secure boot is enabled
  for kernel in vmlinuz-x86_64; do
    if [ -f "(loop)/boot/$kernel" ]; then
      break
    fi
  done
  for initrd in initramfs-x86_64.img; do
    if [ -f "(loop)/boot/$initrd" ]; then
      break
    fi
  done
  if ! linux "(loop)/boot/$kernel" boot=boot "iso-scan/filename=$liveusb/other/$iname" noeject noprompt; then
    # 32 bit fails on secure boot with: vmlinuz has invalid signature
    echo "ERROR: could not load ubuntu, maybe disable UEFI secure boot?"
    return 1
  fi

  initrd "(loop)/boot/$initrd"
  loopback -d loop
  echo "Running $1"
}


/proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-x86_64 lang=en_US keytable=us tz=UTC driver=free nouveau.modeset=1 i915.modeset=1 radeon.modeset=1 misobasedir=manjaro misolabel=M1804 quiet systemd.show_status=1


Δεν ασχολήθηκα με extra_params.

Αποτελέσματα στο συνημμένο

Sammy Dead

Kali

function kali {
  iname=$1
  
  save_default
  if ! loopback loop "$liveusb/other/$iname"; then
    return 1
  fi
  # Don't use regexp, it's not available when secure boot is enabled
  for kernel in vmlinuz-4.19.0-kali3-amd64; do
    if [ -f "(loop)/live/$kernel" ]; then
      break
    fi
  done
 
  for initrd in initrd.img-4.19.0-kali3-amd64; do 
    if [ -f "(loop)/live/$initrd" ]; then
      break
    fi
  done
  
  if ! linux "(loop)/live/$kernel" boot=live "iso-scan/filename=$liveusb/other/kali-linux-mate-2019.1a-amd64.iso" noeject noprompt; then
    # 32 bit fails on secure boot with: vmlinuz has invalid signature
    echo "ERROR: could not load ubuntu, maybe disable UEFI secure boot?"
    return 1
  fi

  initrd "(loop)/live/$initrd"
  loopback -d loop
  echo "Running $1"
}


/proc/cmdline
BOOT_IMAGE=/live/vmlinuz-4.19.0-kali3-amd64 boot=live components splash username=root hostname=kali


Δεν ασχολήθηκα με extra_params.

Αποτελέσματα στο συνημμένο

alkisg

Όταν ξεκινάνε τα live CD, έχουν κάποιον κώδικα που ψάχνει πού βρίσκεται το image.
Το image συνήθως είναι τύπου "squashfs", σαν συμπιεσμένο .zip αρχείο που όμως περιέχει μια ολόκληρη εγκατάσταση, και περιέχεται κάπου μέσα στο CD, π.χ. στο Ubuntu είναι στο φάκελο /casper/filesystem.squashfs.
Στα live CD του Ubuntu ο κώδικας που ψάχνει το image είναι στο πακέτο "casper", το οποίο διαβάζει την παράμετρο iso-scan/filename, κάνει mount το ubuntu.iso, και μετά ψάχνει μέσα στο .iso για να βρει το squashfs image.

Άρα: το iso-scan/filename δουλεύει μόνο σε Ubuntu/casper-based live CDs.

Το Debian δεν χρησιμοποιεί casper, αλλά ένα άλλο πακέτου που λέγεται "liveboot", το οποίο θέλει άλλη παράμετρο, που λέγεται "fromiso=". Άρα μια συνάρτηση debian() θα έπρεπε να έχει "fromiso=" στο εσωτερικό της.

Το Manjaro δεν ξέρω τι χρησιμοποιεί, σίγουρα όχι casper/liveboot. Π.χ. μπορεί να χρησιμοποιεί "dracut", το οποίο να θέλει άλλη παράμετρο. Υπάρχει μάλιστα και η πιθανότητα κάποια διανομή να χρησιμοποιεί πρόγραμμα που να μην υποστηρίζει καν "fromiso" ή ισοδύναμο.

Για όσους δεν έχουν εμπειρία σε τέτοια προγράμματα εκκίνησης casper/liveboot/dracut κλπ, μια λύση είναι να χρησιμοποιήσουν κάποιο άλλο πρόγραμμα π.χ. Rufus, το οποίο να φτιάχνει USB sticks που να έχουν μέσα αυτούσια .iso και ΟΧΙ αποσυμπιεσμένα, και από εκεί να ξεκινήσουν τη διανομή και να κάνουν cat /proc/cmdline. Εκεί θα δουν πώς ονομάζεται η παράμετρος iso-scan/filename ή fromiso κλπ. Δεν ξέρω αν το Rufus υποστηρίζει αυτούσια .iso, θέλει λίγο κοίταγμα για ποιο πρόγραμμα υποστηρίζει κάτι τέτοιο.

Το /proc/cmdline που έκανες paste δεν μας κάνει γιατί μάλλον είναι κατευθείαν από "cdrom" και όχι από USB stick με .iso μέσα του.

Sammy Dead

το /prοc/cmdline είναι από live session από usb φτιαγμένο με dd.

Το παρατάω, μελετάω αυτά που γράφεις και με τον καιρό θα προσπαθήσω πάλι. Ευχαριστώ!

alkisg

Δες λίγο αυτό: https://forum.manjaro.org/t/booting-manjaro-iso-using-grub2/3132

Δηλαδή στο manjaro η αντίστοιχη παράμετρος λέγεται img_loop=.

alkisg

Εδώ έχει μια ωραία λίστα με τις παραμέτρους για τις περισσότερες γνωστές διανομές:
https://github.com/mytbk/liveusb-builder/tree/master/distro

Btw, αν κάποιος προχωρημένος χρήστης θέλει να ενεργοποιήσει "persistent home" στα live CDs του Ubuntu, δηλαδή οι ρυθμίσεις και τα αρχεία στο /home/username να παραμένουν, αρκεί να κάνει ένα δεύτερο partition στο stick, τύπου ext4, και με ετικέτα home-rw, και να περάσει για παράμετρο τη λέξη "persistence" στη γραμμή 60 του grub.cfg:
  if ! linux "(loop)/casper/$kernel" "file=/cdrom/preseed/$uname.seed" boot=casper "iso-scan/filename=$liveusb/ubuntu/$iname" noeject noprompt persistence -- $extra_params; then


Sammy Dead


Δημήτρης Γκίνης

#23
Προσπαθώ να μπουτάρω σε virtual machine από το live usb.
Εκκινεί κανονικά, επιλέγω ubuntu 32 ή 64 bits, φορτώνει κανονικά αλλά όταν πάει να εμφανιστεί η επιφάνεια εργασίας την εμφανίζει με πολλές οριζόντιες γραμμές (φαίνεται το πράσινο φόντο, καταλαβαίνεις τον δείκτη του ποντικιού όταν κινείται, φαίνεται ότι ανοίγει το τερματικό) με αποτέλεσμα να μην μπορείς να κάνεις τίποτα.
Παίζοντας με τις ρυθμίσεις της εικονικής μηχανής δεν κατάφερα κάτι.
Καμιά ιδέα;;

edit: host os-> ubuntu 18.04 64 bit, virtualbox version 5.2.18

update: πρόκειται για γνωστό bug-> https://bugs.launchpad.net/ubuntu/+source/lubuntu-meta/+bug/1766859 Η λύση που προτείνει δουλέυει (Right Ctrl +f1, Right Ctrl+f7)

alkisg

Ναι κι εγώ το παθαίνω και αλλάζοντας vt με Ctrl+Alt+F2 / Ctrl+Alt+F7 στρώνει.

alkisg

Ενημέρωσα το https://github.com/alkisg/liveusb με τις τρέχουσες εκδόσεις ipxe/grub κλπ.
Χάρη στο νέο grub, πλέον το liveusb υποστηρίζει να τοποθετούμε .iso από διάφορες διανομές στο stick και να δημιουργεί δυναμικά τα αντίστοιχα grub μενού.

Υποστηριζόμενες διανομές: clonezilla, debian, fedora, kali, manjaro, opensuse και ubuntu.

Για τους Πληροφορικούς των Ιωαννίνων, θα ετοιμάσω στικάκι όταν βγει και η νέα έκδοση 2004 των Windows 10 εντός Μαΐου.


gidarakos

Άλκη σε Lenovo ThinkCentre M91p (CPU: i5-2500, RAM: 4GB), ενώ το liveusb bootάρει κανονικά σε legacy mode 20.04.1, σε UEFI mode εμφανίζει στιγμιαία το μήνυμα "not found. Initializing defaults." και ξανακάνει reboot!

alkisg

Είναι το τελευταίο του Μαΐου 2020; Ή παλιότερο;

gidarakos

Δεν είμαι σίγουρος! Επειδή έχω αρκετά iso μέσα (ubuntu+win10), πρέπει να φτιαχτεί από την αρχή ή μπορούμε με κάποιο copy/overwrite αρχείων να εξασφαλίσουμε ότι είναι "Μαΐου 2020";

alkisg

Τρέξε το παρακάτω και δες τη στήλη UUID, τι βγάζει εκεί; Το δεύτερο νούμερο είναι η έκδοση, π.χ. 20-05.

# lsblk --fs
NAME   FSTYPE LABEL   UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sdf                                                                       
├─sdf1 vfat   LIVEUSB 1973-2005                               2,5G    84% /media/alkisg/LIVEUSB


Γενικά δεν είναι εύκολο να γίνει αναβάθμιση του boot code στο MBR, θέλει grub-install /dev/sdf με κατάλληλη έκδοση grub, γι' αυτό και το διαθέτω ως image. Αλλά γενικά εφόσον δουλεύει, δεν χρειάζεται αναβαθμίσεις.
Έχω εντοπίσει ένα πρόβλημα που μπορεί να σχετίζεται με αυτό που λες. Σε κανά μήνα που θα βγουν νέα Windows θα ανεβάσω νέα έκδοση με διορθωμένο το πρόβλημα, το ξανακοιτάμε τότε.

gidarakos

# lsblk --fs
NAME   FSTYPE LABEL   UUID                                 MOUNTPOINT
sda                                                        
├─sda1 ext4           35d9259f-418d-4a88-99ba-9ea3eff5a97d /
├─sda2 ext4           bd1847b7-07d2-403f-8de3-1caff9e0efaa /home
└─sda3 swap           21d3897e-e0bf-4198-8fa5-ae3605208b39 [SWAP]
sdb                                                        
└─sdb1 vfat   LIVEUSB 1973-2005                            /media/administrator/LIVEUSB
sr0


Πρέπει να είναι updated!

Παράθεση από: alkisg στις 30 Σεπ 2020, 08:10:20 ΠΜ
Έχω εντοπίσει ένα πρόβλημα που μπορεί να σχετίζεται με αυτό που λες.
Υπάρχει workaround για να συνεχίσω την εγκατάσταση σε UEFI; Αν προσπαθούσα με live CD ή ISO/Rufus;

alkisg

Προλαβαίνεις να πατήσεις κάτω βελάκι ή esc και να παραμείνεις στον grub του liveusb, ή δεν γίνεται να αποφευχθεί το reboot;

Εννοείται ότι και το live cd και οι άλλες μέθοδοι δημιουργίας liveusb sticks (rufus, dd) μπορεί να δουλέψουν.

gidarakos

Με F12 σου δίνει επιλογή για legacy USB ή UEFI USB.
Με το legacy εμφανίζεται κανονικά το grub menu και συνεχίζει κανονικά με το iso που επιλέγεις.
Με το UEFI flashάρει σε μαύρη οθόνη το μήνυμα "not found. Initializing defaults." και κάνει reboot, χωρίς να αλλάζει κάτι όταν πατάς ESC ή κάτω βελάκι. Νομίζω δε φορτώνει καθόλου grub!

alkisg

Πολλές υλοποιήσεις UEFI έχουν διάφορα bugs (γι' αυτό ακόμα προτιμώ το BIOS).
Δοκίμασε με Rufus, άλλες μεθόδους, ή dd. Αν δουλέψει έτσι, το ξανασυζητάμε, αν όχι, είναι πολύ buggy το UEFI σου.

gidarakos

Δοκίμασα rufus/20.04.1 flash usb και bootάρει χωρίς προβλήματα σε UEFI (και στο legacy OK).

Παράθεση από: alkisg στις 30 Σεπ 2020, 11:07:10 ΠΜ
Αν δουλέψει έτσι, το ξανασυζητάμε
Άλκη σε ενδιαφέρει να το βλέπαμε κάποια στιγμή αύριο;

alkisg

Αρχές σχολικής χρονιάς είναι πιο σημαντικό να λύνονται τα προβλήματα των νέων εγκαταστάσεων.
Π.χ. σήμερα πληροφορήθηκα για ένα bug σε σχέση με τους κοινόχρηστους φακέλους, θα χρειαστώ λίγες μέρες να το διορθώσω.
Το liveusb ας το πιάσουμε όταν βγουν τα καινούργια Windows 20H2 που θα είναι αφορμή για δημιουργία νέας έκδοσης liveusb.

markakis

Άλκη, η διαδικασία είναι ίδια και για τα Windows 11;

alkisg

Νομίιιιιζω ότι το είχα δοκιμάσει για Windows 11 και έπαιξε, αλλά να πω την αλήθεια βαρέθηκα να κάνω την διαδικασία προετοιμασίας USB stick με το media-creation-tool της Microsoft, παίρνει πολύ χρόνο και αποτυγχάνει συχνά.

Οπότε τώρα το κύριο στικάκι μου για τέτοιες δουλειές είναι βασισμένο στο Ventoy, όπου ρίχνεις κατευθείαν το windows.iso ή το linux.iso και ξεμπερδεύεις.
Παράλληλα έχω κι ένα δεύτερο στικάκι με το παρόν liveusb για πιο προχωρημένα πράγματα, π.χ. εκκίνηση LTSP client image ή για τις περιπτώσεις που το Ventoy αποτυγχάνει.

Btw μια και το αναφέρουμε παραπάνω, μου ήρθε ο πρώτος Η/Υ (από προμήθεια για ΕΠΑΛ) που ΔΕΝ υποστηρίζει καθόλου εγκατάσταση BIOS. Και λαμβάνοντας υπ' όψη ότι και τα Windows 11 απαιτούν UEFI, από εδώ και πέρα οι εγκαταστάσεις που θα κάνω στα σχολεία της περιοχής μου θα είναι UEFI/GPT (αλλά και με bios_grub partition μήπως ποτέ χρειαστεί).

markakis

Δοκίμασα το Ventoy (δεν το ήξερα) και είναι πολύ βολικό και αυτό για την δουλειά που το ήθελα. Ευχαριστώ!

Ότι έφτιαξες αυτό το τρομερά χρήσιμο και εύχρηστο εργαλείο, το liveusb, και τελικά προτείνεις κάποιο άλλο, με ξεπερνάει. ;)

alkisg

Παράθεση από: markakis στις 21 Σεπ 2023, 10:15:15 ΜΜΌτι έφτιαξες αυτό το τρομερά χρήσιμο και εύχρηστο εργαλείο, το liveusb, και τελικά προτείνεις κάποιο άλλο, με ξεπερνάει. ;)

Όλα τα προγράμματα που φτιάχνω είναι για να καλύψουν κάποιο κενό.
Αν στη συνέχεια το κενό καλυφθεί από άλλα λογισμικά, τόσο το καλύτερο, γλυτώνω και τον κόπο ανάπτυξης/συντήρησης!