Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
witam,
pracowałem w oparciu o:
http://vmlinux.org/twiki/bin/view/Bazaar/BootstrapDebian
a następnie:
http://vmlinux.org/twiki/bin/view/Bazaar/MakeABootableDebianCD
wszystko fajnie, iso mam zrobione podobnie do tych procedurek ktore tam sa rozpisane.
podczas ładowania się mojego live cd występuje taki błąd:
vfs: mounted root (ext2 filesystem)
freeing unused kernel memory: 256k freed
attempt to access beyond end of device
ram0: rw=0, want=425992, limit=128000
ext2-fs error (device ram0): ext2_get_inode: unable to read inode block - inode=52625, block=212995
attempt to access beyond end of device
ram0: rw=0, want=147980, limit=128000
ext2-fs error (device ram0): ext2_get_inode: unable to read inode block - inode=18217, block=73989
kernel panic - not syncing: no init found. try passing init= option to kernel.
jezeli chodzi o moj isolinux.cfg to wyglada on tak:
default 2.4.18 prompt 0 timeout 200 display boot.msg label 2.4.18 kernel vmlinuz append initrd=initrd.img ramdisk_size=128000 prompt_ramdisk=0 rw root=/dev/ram0 vga=normal
etc/fstab (oczywiscie wirtualny)
/dev/ram0 / ext2 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0
no i cos tu nie styka - to jest jeden problem, chcialem zobaczyc czy jestem sobie w stanie takie live distro zrobic - takie podstawowe wg. jakiegos tutoriala nawet bez tego co chce tam faktycznie miec ale zeby zobaczyc czy to po prostu zadziala.
teraz to co chcialbym osiagnac docelowo to jest:
mam na vmware postawionego debiana etch, skonfigurowany caly soft na nim i doszedlem z tym wszystkim co tam mam (postgres, apache i rozne inne szmery bajery) do wielkosci ~650 mb - czyli na cd sie zmiesci - wypas.
tylko teraz jak sie ma to ramdisk_size= do wlasnie wielkosci obrazu rozpakowanego iso ? z tego co gdzies wyczytalem (chyba w jednym z tych linkow) to ramdisk_size powinien byc wielkosci rozpakowanego iso - czyli bylo by to 650 mb ? makabra za duzo i zaden komp w domu mi na pewno tego nie chwyci.
pozatym, jak juz mam takie distro zaciagniete z debootstrapa to czy wystarczy ze z normalnego debiana po prostu przekopiuje sobie do tego vroot'a te pliki bilbioteki itp ktore chce i pozniej to tak zjarac czy cos jeszcze trzeba zrobic ? a moze w ogole zchrootowac na vroot'a i dopiero wtedy montowac jakikolwiek soft ? (chociaz tego ostatniego wolalbym jednak uniknac).
no to chyba tyle. z gory bardzo dziekuje za wskazowki itp itd.
ps. tak chce by to moje livecd to byl debian.
aha ps2. jadra nie kompilowalem sam, wzialem to ktore bylo w /boot/vmlinuz-xyz i skopiowalem je w odpowiednie miejsce tak jak tutorial mowil.
Ostatnio edytowany przez Fo (2008-04-20 00:29:40)
Offline
dobra powyższy problem rozwiązałem - az wstyd sie przyznac o co chodzilo wiec moze przemilcze...
teraz tylko mam inny.
mianowicie,
moje iso po rozpakowaniu czyli to jaki sobie zrobilem vroot.img - wazy 650 mb
w isolinux.cfg mam tak:
default 2.6.18 prompt 0 timeout 200 display boot.msg label 2.6.18 kernel vmlinuz append initrd=initrd.img ramdisk_size=250000 prompt_ramdisk=0 rw root=/dev/ram0 vga=normal
a w fstab na spakowanym juz systemie -
/dev/ram0 / ext2 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0
i wyrzuca mi podczas bootowania ze nie moze poprawnie zamontowac root filesystemu na ext2 z niewiadomego powodu i powod chyba kumam - za malo dostepnej pamieci do zaalokowania pod rozpakowane distro o wielkosci 650 mb - no nie wrzuci tego do ramu bo jest fizycznie go w kompie 512 mb.
tylko jak to w inny sposob rozwiazac ?
oj bylbym goraco wdzieczny za pomoc, bo slecze juz nad tym chyba z trzeci dzien :/
Offline
Chyba logiczne że nie może zamontować ramdysku jako ext2 jak nie jest on sformatowany w EXT2? ;>
Jak to rozwiązać?
Mój pomysł jest taki:
/ montujesz jako tmpfs
na / robisz katalog: /mnt/cdrom
montujesz tam plyte CD
na CD masz obraz systemu plikow np w ext2 (np. /mnt/cdrom/root.img), mountujesz go używając użądzeń loop (mount -o loop /mnt/cdrom/root.img /mnt/realroot)
robisz dowiazania symboliczne do plikow readonly do tego obrazu (np. ln -s /mnt/realroot/bin /bin)
I gotowe ;)
Druga metoda: montujesz jako / poprzez loop plik obrazu systemu plików, a pliki kóre mogą się zmieniać (np. /etc/passwd) linkujesz na tmpfs (ln -s /mnt/ramdrv/etc/passwd /etc/passwd).
Przydało by Ci się napisać do tego wlasnego init'a czy coś takiego.
Sry ze mętnie pisze ale nie jestem w stanie się zmusić do sensowniejszego myslenia.
Offline
hmm czyli jezeli dobrze kumam, to pierwszym sposobem chcialbys tak jakby zrobic ze:
to bedzie live cd, ktore bedzie w sobie mialo tak jakby CD, linki beda w rootsystemie szly do tego zamontowane wewnatrz cd i dzieki temu to bedzie dzialac a przestrzeni bedzie niby wiecej - bo wtedy moge sobie zjarac np. taka 650tke a sam realny base system powiedzmy do max 250mb i wtedy jak on bedzie miec 250 mb to bede se go mogl zaladowac do ram0 a cala reszta ktorej potrzebuje bedzie sie co... ew. dogrywac z tej reszty przestrzeni powyzej base systemu ?
hmm no jakos tak to rozumiem.
drugiej metody siakos nie lapie, ale wlasnie zjadlem wiaderko jogurtu i spalilem pol paczki fajek wiec moze to tego wina - ps. kto powiedzial ze tylko kobiety w stresowych sytuacjach duzo jedza ? :P
Offline
Chodzi o to żeby ramdysk był jak najmniejszy. Teraz już mogę coś konkretniej napisać:
Na płycie CD masz gdzies spakowany obraz systemu powiedzmy jako root.img (niech bedzie ze w ext2 robiony)
i teraz przy bootowaniu:
1. Katalog / musisz mieć podmontowany jako ramdysk przez initrd (żeby mieć /proc /dev etc.)
2. Tworzysz katalog /mnt/cdrom
3. Montujesz plyte cd jako /mnt/cdrom
4. Tworzysz katalog /mnt/root
5. Montujesz spakowany system (/mnt/cdrom/root.img) jako /mnt/root w trybie read-only
6. Teraz do każdego pliku który jest w /mnt/root i nie musi mieć praw do zapisu (jak np aplikacje w /bin) robisz dowiązanie symboliczne w /
wg. powinno zadzialać może jest jakaś prostsza metoda ;)
Offline
ok czyli z tego co rozumiem i to co zamierzam zrobić to będzie wyglądać tak:
fstab w wypalonym systemie,
/dev/ram0 / ext2 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 /dev/cdrom /mnt/cdrom iso9660 ro 0 0 /mnt/cdrom/root.img /mnt/root ro 0 0
+ dowiazania symboliczne do /mnt/root/bin/bash np. od /bin/bash - tak ?
tylko tak troche nie za bardzo to jednak kumam - czyli wszystko z /bin/ mam sobie zsymlinkowac, tak samo wszystko z etc, var i tak dalej ?
pozatym, ja sobie tam wg. tego manuala - robie z root.img -> initrd.img i to sie laduje pozniej jak system bootuje - czy mam ten krok jakos obejsc czy cos ?
jezeli chodzi o robienie wlasnego iso to laik ze mnie kompletny i jak widac nie bardzo jarze, ale jakbys jeszcze cos dopowiedzial - to GRATZ duzy.
Offline
fstab:
none / tmpfs defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 /dev/cdrom /mnt/cdrom iso9660 ro 0 0 /mnt/cdrom/root.img /mnt/root ro,loop 0 0
Ale na http://eko.one.pl/index.php?page=LiveCD masz wszystko opisane ładnie, nawet lepszym sposobem niż ja kombinowałem.
Pozdrawiam.
Offline
zrobiłem według tego opisu na eko.one.pl - ale niestety podczas ładowania systemu dostaje błąd (mniej więcej takiej treści):
modprobe fatal could not load modules.dep
dziwne bo, moduły są umieszczone tam gdzie powinny wg. opisu - w /initrd_fs/lib/modules/2.6.15-livecd/kernel i tu mam cdrom.ko ide-cd.ko squashfs.ko zlib_inflate.ko - i je przegrałem z katalogu gdzie kompilowałem jądro - z drivers a niektore z lib/
linijka od ładowania modułów w linuxrc wygląda tak:
insmod /lib/modules/`uname -r`/kernel/$MOD.ko
a fizycznie mam na płycie coś takiego jak:
lib/modules/2.6.15-livecd/kernel/ - i tutaj moduły.
no i tak czy inaczej dostaje błąd że nie ma modules.dep - ale mam wrażenie, że to coś ten insmod nie może załadować modułów tak jak powinien i przez to dochodzi do konfliktu. zastanawia mnie też opcja, gdzieś czytałem na jakimś forum, że initrd był skonstruowany bez "tagu" czy jakkolwiek to nazwać wskazującego na wersję kernela - ja korzystam z tego 2.6.15 który autor opisu zamieścił na sajcie.
macie może na to jakiś pomysł ?
z góry dzięki wielkie.
Offline
dobra jest tak, poradziłem sobie a rozwiązaniem problemu była kompilacja module-init-tools z prefixem prefix=/ , wytranslateowanie listy modułów do /etc/modprobe.conf i utworzenie symlinka o którego krzyczał w /lib/modules/
dzięki bardzo za pomoc wszystkim :)
pozdrówka,
Fo
Offline
dobra to teraz jeszcze mam jeden problem, proboje uruchomic uslugi takie jak apache2, postgres itd. to wszystko zakladam powinno miec jakies swoje odniesienie w fstabie. ciekawi mnie np. w jaki sposob apache moze ? zapisac jakas informacje w swoich logach w momencie kiedy to ... bootuje z cd w trybie read-only ? czyli reasumujac w jaki sposob pozwolic na dokonanie jakiegos tymaczasowego zapisu w tymczasowym pliku log czy tez analogicznie rozumujac mozna by to powiazac z utworzeniem pid'u ?
Offline
tmpfs to ramdysk.
Wiec zamontuj sobie np /var/log jako tmpfs i po problemie
Offline
no wlasnie nie do konca nie wiem np. dlaczego nie jestem w stanie utworzyc socketa przez jakas aplikacje.
przykladowo django uruchamiam z parametrem socket=/var/run/project.sock a w fstabie mam /var/run jako tmpfs - wiec niby nie powinno byc problemu a jednak aplikacja nie chce wystartowac - pojawia sie w logach od apache blad ktory mowi ze nie mozna utworzyc unix socketa. podobnie xfce4 - error in locking authority file //.Xauthority
Offline
no namierzylem problem i za cholere jeszcze nie wiem jak sie z nim rozprawic - nawet apache2 nie jest w stanie utworzyc swojego socketa (dokladniej fastcgi mimo iz w fcgi zdefiniowalem odpowiednia sciezke w ktorej mozna wykonac taka operacje, wczesniej tworze katalogi skryptem ktory sie uruchamia w trakcie bootowania i je odpowiednio chownuje - wiec apache powienien moc utworzyc sobie socket ale tego nie robi)
netstat -a pokazuje jedynie ze po tcp chodzi usluga www na porcie 80, caly czas wali do logow ze daemon fastcgi nie jest w stanie utworzyc unix domain socketa i ze jest restartowany - i tak w kolko.... czegos gdzies zapomnialem tylko w ktorym miejscu ?
Offline