[Skrypt] Tworzenie bootowalnego pendriva z SysLinuxem

Potrzebujesz pomocy z C, C++, perl, python, itp.
torrmen
Posty: 67
Rejestracja: 04 lutego 2013, 16:42
Lokalizacja: Wrocław (głównie)

[Skrypt] Tworzenie bootowalnego pendriva z SysLinuxem

Post autor: torrmen »

Witam,

jestem w trakcie tworzenia skryptu który ma za zadanie wykasowanie wszystkich partycji na pendrivie a następnie założeniu jednej w fat32 po czym ustawieniu flagi boot na true i dalej coś mi umyka bo po skopiowaniu syslinuxa na pendrivea i próbie uruchomienia systemu z niego wywala mi błąd że dysk nie jest bootowalny.

Może ktoś mi opisać co mogę robić źle? Mam wrażenie że umyka mi coś pomiędzy założeniem partycji fat32 na pendrivie i ustawieniu jego flagi boot a wgraniem syslinuxa... Czy trzeba wgrać jakiś specjalny plik bin na mbr pendrivea?
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

No ja kiedyś robiłem wedle tego przepisu:
http://www.syslinux.org/wiki/index.php/ ... _For_Linux
Nie mam wolnego pendrive'a żeby przejść te kroki, ale pamiętam, że toto działało
peligan
Posty: 26
Rejestracja: 09 kwietnia 2010, 08:42

Post autor: peligan »

Stworzenie takiego skryptu przerasta możliwości wielu ludzi na tym forum,
a ci co to potrafią, to im się nie chce.

Syslinux jest bardzo prosty załóżmy że mamy jakiś pendrive /dev/sdb1

na pendrivie musisz utworzyć katalog syslinux,
skopiować do niega 'vesamenu.c32' z katalogu 'usr/lib/syslinux/',
stworzyć plik startowy o nazwie 'syslinux.cfg' np. taki

Kod: Zaznacz cały


menu title Boot menu
# menu background /syslinux/fajny_obrazek_tła.png
menu color title        * #FFFFFFFF *
menu color border       * #00000000 #00000000 none
menu color sel          * #ffffffff #76a1d0ff *
menu color hotsel       1;7;37;40 #ffffffff #76a1d0ff *
menu color tabmsg       * #ffffffff #00000000 *
menu color help         37;40 #ffdddd00 #00000000 none
#menu vshift 17
#menu rows 10
#menu helpmsgrow 15
# The command line must be at least one line from the bottom.
menu cmdlinerow 16
menu timeoutrow 16
menu tabmsgrow 18

menu tabmsg Press ENTER to boot or TAB to edit a menu entry

label live-686
        menu label Live 686-3.10-2-686-pae
        kernel /live/vmlinuz-3.10-2-686-pae
        append initrd=/live/initrd.img-3.10-2-686-pae boot=live config noswp quiet

label Debian GNU/Linux REAL
        menu label Debian GNU/Linux REAL
        kernel /live/vmlinuz-3.10-2-686-pae root=/dev/sda3 ro quiet
        append initrd=/live/initrd.img-3.10-2-686-pae

label memtest
        menu label Memory test
        kernel /live/memtest

label MHDD
        menu label MHDD
        kernel /live/memdisk raw
        append  initrd=/live/mhdd_fdd.img

default /syslinux/vesamenu.c32
prompt 0
timeout 99

i wykonać polecenie

Kod: Zaznacz cały


syslinux -i /dev/sdb1

Ps.
Przykładowy plik pochodzi z czasów gdy musiałem pracować na laptopie bez twardego dysku.
Musisz go dostosować do swoich potrzeb, oraz włączyć fajny obrazek tła.

Pozdrawiam
torrmen
Posty: 67
Rejestracja: 04 lutego 2013, 16:42
Lokalizacja: Wrocław (głównie)

Post autor: torrmen »

Witam ponownie,

przepraszam że wcześniej się nie odezwałem ale byłem zajęty :(

Okazało się że skrypt zadziałał problemem było wgrywanie pliku mbr.bin

O dziwo komenda nie działała poprawnie
printf '\1' | cat mbr.bin - | dd bs=440 count=1 iflag=fullblock conv=notrunc of=/dev/sda &>> /var/log/crepen.log
ale po zainstalowaniu i zastosowaniu :
install-mbr -p 1 /dev/sdb1 &>>/var/log/crepen.log
oraz po zainstalowaniu i wgraniu syslinuxa :
syslinux -d /boot/syslinux -s /dev/sdb1;
wszystko poszło ładnie :)

Niestety nadal wolałbym wgrywać mbr.bin na pena bez potrzeby instalowania install-mbr ale coś dd nie robi tego prawidłowo. Pewnie złe polecenie :(
peligan
Posty: 26
Rejestracja: 09 kwietnia 2010, 08:42

Post autor: peligan »

Twój skrypt zakłada że mbr.bin jest w twoim aktualnym katalogu, tymczasem mbr.bin dla syslinuxa jest w /usr/lib/syslinux/,
chyba, że /usr/lib/syslinux/ jest twoim aktualnym katalogiem, albo przekopiowałeś mbr.bin do swojego katalogu.
Podałeś również of=/dev/sda, to spowoduje wpis na twoim dysku twardym, a nie na pendrivie.

Spróbuj tego.
fragment manuala do syslinuxa.

man syslinux

syslinux --install /dev/fd0

This will alter the boot sector on the disk and copy a file named ldlinux.sys into its root directory.

a po polsku

Zmieni to sektor rozruchowy na dysku i skopiuje plik o nazwie ldlinux.sys w jego katalogu głównym.
Musisz tylko zmienić /dev/fd0 na /dev/sdb1

Ps.
Nikt nie powiedział że jeżeli u ciebie pendrive jest na /dev/sdb1 to u innych też tak będzie, dlatego pisanie uniwersalnych skryptów jest trudniejsze niż przypuszczasz.

Życzę powodzenia i pozdrawiam.
torrmen
Posty: 67
Rejestracja: 04 lutego 2013, 16:42
Lokalizacja: Wrocław (głównie)

Post autor: torrmen »

pendrive jest dynamicznie identyfikowany a jako sdb1 dałem przykład - u mnie na kompie wykrywa go np jako /dev/sdg bo bywa różnie a jak wiecej penów to jest wybór w menu :)

Co do install to jest to może i idealne rozwiązanie i jutro przetestuje na spokojnie :)
Awatar użytkownika
Yampress
Administrator
Posty: 6416
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

Samo skopiowanie nic nie da. Musi być pewien fragment rozruchowy w pewnym miejscu pendrive zainstalowany
https://wiki.archlinux.org/index.php/Syslinux
torrmen
Posty: 67
Rejestracja: 04 lutego 2013, 16:42
Lokalizacja: Wrocław (głównie)

Post autor: torrmen »

Hmm... zastanawia mnie jak to rozbić na dokładniejsze informacje :)

znaczy się, żeby nie używać zbyt wielu niepotrzebnych rzeczy bo jak to mówią... :Po co wyciągać armatę jak chcesz zabić komara. Wystarczy łapka na muchy" :d
ODPOWIEDZ