Титла: монт. на нов образ и демонт. на стария в движение Публикувано от: vstoykov в Sep 19, 2005, 23:18 Обмислям възможността да напиша нова инсталационна програма за VS Live. Дистрибуцията ще стане на три диска - един жив диск (номер нула), още един диск (номер едно), съдържащ пакетите, които са инсталирани на нулевия, и трети диск (номер две) с допълнителни пакети.
Идеята е потребителя да има възможност да избира кои пакети да се инсталират. До сега има ограничение да се инсталират 2GB софтуер наведнъж и после на който му се се вижда много да деинсталира каквото не му трябва (процес отнемащ ужасно много време). Новата инсталационна програма ще може да инсталира избрани пакети от диск номер едно (първия диск с пакети). За целта обаче ще трябва да се направи някаква магия - да се копира компресираната файлова система (zimage) на твърдия диск и да се ползва от там без да се прави рестарт и да се спират програмите, които са стартирани (с цел да се извади нулевият диск и да се напъха номер едно и после номер две на неговото място) Разбира се копирането на компресираната файлова система на твърдия диск ще отнеме време, но не толкова колкото деинсталирането на ненужните програми. Някой да знае как може да се направи това и изобщо възможно ли е? remount Attempt to remount an already-mounted file system. This is commonly used to change the mount flags for a file system, especially to make a readonly file system writeable. It does not change device or mount point. Пише, че не може. Но... няма невъзможни неща. Проблемът може и да се заобиколи - изобщо да не се правят такива неща. Но не ми се заобикаля. Идеалния вариант ми се струва магията да се получи. И така, да започваме с магията. Написах този скрипт: ------------------------------------------------------------- #!/bin/bash # къде ще се копира компресираната файлова система? DEST_MNTPNT=/mnt/hda7/ # може името на файла да се различава от zimage DEST_NAME=copy_of_zimage DEST_NAME_full="${DEST_MNTPNT}/vslive/${DEST_NAME}" mkdir $DEST_MNTPNT/vslive cp "/cdrom/vslive/zimage" "$DEST_NAME_full" mkdir /zimage2 mount "$DEST_NAME_full" /zimage2 -o loop echo "ще се монтира /zimage2/mountme.iso в точка /cloop" mount /zimage2/mountme.iso /cloop -o loop #-n без да се пише в mtab echo "ще се демонтира /zimage/mountme.iso от точка /cloop" umount -l /zimage/mountme.iso /cloop echo "ще се монтира повторно /cloop" mount /zimage2/mountme.iso /cloop -o loop echo "ще се демонтират /zimage и /cdrom" umount -l /zimage umount -l /cdrom echo "ще се извади диска" read eject /cdrom echo "Готово." ------------------------------------------------------------- До момента на изваждане на диска всичко е наред. След изпълнение на командата eject файлът /var/log/syslog се пълни с това: Sep 19 22:42:56 darkstar kernel: program eject is using a deprecated SCSI ioctl, please convert it to SG_IO Sep 19 22:42:57 darkstar last message repeated 2 times Sep 19 22:43:51 darkstar kernel: hdc: tray open Sep 19 22:43:51 darkstar kernel: end_request: I/O error, dev hdc, sector 612404 Sep 19 22:43:51 darkstar kernel: Buffer I/O error on device hdc, logical block 153101 Sep 19 22:43:51 darkstar kernel: hdc: tray open Sep 19 22:43:51 darkstar kernel: end_request: I/O error, dev hdc, sector 612408 Sep 19 22:43:51 darkstar kernel: Buffer I/O error on device hdc, logical block 153102 Sep 19 22:43:51 darkstar kernel: hdc: tray open Sep 19 22:43:51 darkstar kernel: end_request: I/O error, dev hdc, sector 612404 Sep 19 22:43:51 darkstar kernel: Buffer I/O error on device hdc, logical block 153101 Sep 19 22:43:51 darkstar kernel: hdc: tray open Sep 19 22:43:51 darkstar kernel: end_request: I/O error, dev hdc, sector 612408 Sep 19 22:43:51 darkstar kernel: Buffer I/O error on device hdc, logical block 153102 Sep 19 22:43:51 darkstar kernel: hdc: tray open Sep 19 22:43:51 darkstar kernel: end_request: I/O error, dev hdc, sector 612404 Sep 19 22:43:51 darkstar kernel: Buffer I/O error on device hdc, logical block 153101 Sep 19 22:43:51 darkstar kernel: hdc: tray open Sep 19 22:43:51 darkstar kernel: end_request: I/O error, dev hdc, sector 612408 Sep 19 22:43:51 darkstar kernel: Buffer I/O error on device hdc, logical block 153102 и в един момент: Sep 19 22:43:52 darkstar kernel: end_request: I/O error, dev hdc, sector 1011196 Sep 19 22:43:52 darkstar kernel: hdc: tray open Sep 19 22:43:52 darkstar kernel: end_request: I/O error, dev hdc, sector 1011200 Sep 19 22:43:52 darkstar kdm[6500]: X server for display :0 terminated unexpectedly Sep 19 22:43:52 darkstar kernel: hdc: tray open Sep 19 22:43:52 darkstar kernel: end_request: I/O error, dev hdc, sector 1011204 Sep 19 22:43:52 darkstar kernel: hdc: tray open Sep 19 22:43:52 darkstar kernel: end_request: I/O error, dev hdc, sector 1011208 Както се вижда, X-а забива. Преди момента на изпълнение на командата eject, при стартиране на програми, които не са били кеширани, се наблюдава активност на CD-ROM устройството. След изваждането на CD-ROM-а, се наблюдават гореописните съобщения за грешки. Има и друг вариант - да не се копира компресираната файлова система на дял от твърдия диск, а в оперативната памет. Това на този етап е налично като функционалност (извършва се преди монтиране на компресираната файлова система). Разбира се може и копирането на компресираната файлова система на твърд диск да се извърши в същия момент когато се прави копирането в RAM. Но искам това да става след като се е стартиала графичната среда и потребителя е направил далове с някоя лесна за ползване програма (GParted или QTParted). Не е добра идея да се копира компресираната файлова система преди потребителя да е направил дяловете за инсталация, защото това ще ограничи възможностите за редактиране таблицата на дялове. Има още един вариант - да се направи специална компресирана файлова система предвидена само за инсталация, която лесно да се събере в оперативната памет (и да се ползва когато потребителя избере install от някакво меню, което се появява съвсем в началото на зареждане на системата - може би там където сега е менюто Стартиране/Настойки). А може и да се направи специално initrd, което да се зарежда когато се напише install преди зареждане на ядрото. Май трябва да видя при Fedora-та и някои други дистрибуции са направени тези неща... Титла: монт. на нов образ и демонт. на стария в движение Публикувано от: в Sep 20, 2005, 01:52 Веесо : Но искам това да става след като се е стартиала графичната среда и потребителя е направил далове с някоя лесна за ползване програма (GParted или QTParted). Не е добра идея да се копира компресираната файлова система преди потребителя да е направил дяловете за инсталация, защото това ще ограничи възможностите за редактиране таблицата на дялове. - Защо не го направиш изборът на дял и форматирането да е в началото , преди всичко друго - (след като се избере инсталация разбира се) и след това може да караш по този вариант ? Ако искаш (по-лесно) сложи ограничение swap дяла да е мин. 512 МБ и го използвай като раотна площ за копиране на компресираната фс.
Титла: монт. на нов образ и демонт. на стария в движение Публикувано от: vstoykov в Dec 10, 2005, 23:13 В крайна сметка реших следното:
Дистрибуцията ще има три диска - един жив диск и два диска с пакети. Първия диск с пакети ще бъде зареждащ и от него ще се стартира инсталационна програма с псевдографичен интерфейс (базиран на програмата dialog). Цялата система ще работи в оперативната памет за да може да се извади първия инсталационен диск и да се постави следващия без рестартиране. Ще има няколко варианта за инсталация: 1)инсталиране на всичко от живия диск (нищо ново) 2)инсталиране на всичко от живия диск + инсталиране на пакети от втория диск с пакети (пак нищо ново) 3)инсталиране на пакети от първия диск с пакети 4) инсталиране на пакети от първия диск с пакети + инсталиране на пакети от втория диск с пакети. 5)безинсталационно копиране на живия диск на съществуващ дял - примерно fat32 (пак нищо ново - има го като функционалност отдавна). |