« -: 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-та и някои други дистрибуции са направени тези неща...