Уикикниги bgwikibooks https://bg.wikibooks.org/wiki/%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 MediaWiki 1.46.0-wmf.23 first-letter Медия Специални Беседа Потребител Потребител беседа Уикикниги Уикикниги беседа Файл Файл беседа МедияУики МедияУики беседа Шаблон Шаблон беседа Помощ Помощ беседа Категория Категория беседа TimedText TimedText talk Модул Модул беседа Event Event talk Как да си направим собствено LiveCD 0 2101 16413 15593 2026-04-08T15:46:50Z Skip678 5709 16413 wikitext text/x-wiki == Въведение == Това кратко ръководство ще ви покаже колко е лесно да си направите livecd. LiveCD е диск с ГНУ/Линукс, който се зарежда директно от CD-ROM-а без да е нужна инсталация на твърдия диск. Описания тук подход има следните предимства пред използването на catalyst (Програма за направа на LiveCD-та, разработена от програмистите на Gentoo): * Програмния код се запазва непроменен без да се губи през последващите направи на livecd-то. Това ви позволява да синхронизирате (sync), актуализирате (update) и настройвате работната среда постепенно, както при нормална работа с вашата система. * Зареждането на CD-то става с GRUB (ISOLINUX остава като алтернатива). Така имате същата гъвкавост както при работа с нормална система, т.е. имате възможност да променяте параметрите на ядрото, откриването на устройства, и т.н. * Запазване на програмния код между итерациите, води до значителното намаляване на времето за направата на нови CD-та. Можете да използвате [http://www.linux-live.org Linux Live Scripts] системата, или директно да използвате инструмент, базиран на нея, наречен makelivecd - [http://makelivecd.awardspace.com/ сайт]. == Изисквания == Необходимо е да имате достатъчно свободно място. Колко, зависи от избора на пакетите които сте решили да включите в livecd-то. Средно, около 4 GB трябва да са достатъчни. Трябва сте запознати с инсталирането на Gentoo от stage2 tarball, защото това е до голяма степен каквото правим тук. Ако не се чувствате уверен, консултирайте се с Gentoo [http://www.gentoo.org/doc/en/handbook наръчникa]. Използването на stage1 е също възможно, но ще отнеме много по-вече време в сравнение със stage2. Освен това мнозинството от хората ще направят нещо подобно на <code>emerge -e world</code> към края, така че това е най-добрият начин. == Настройване на Работната Среда == Обkръжението което ще ползваме е просто директория в която ще chroot-нем и където ще инсталираме Gentoo (аналогично на инсталирането от официално CD). Съдържанието на тази директория е това, което ще „направи“ нашето livecd. За целта използваме директорията 'source', която създаваме в директорията '~/livecd'. cd ~ mkdir -p livecd/source Изтеглете stage2 tarball от най-близкото Gentoo огледало и го запомнете във вашата home директория. Като пример тук е използван i686 stage2, който би трябвало да работи на повечето съвременни PC-та. Разархивирайте го в директорията 'source'. После направете нова директория 'newroot', която ще бъде използвана по време на началното зареждане. cd livecd/source tar jxvpf ~/stage2-i686-2004.2.tar.bz2 mkdir newroot Изтеглете последния portage snapshot във вашата home директория и го разархивирайте в новата работна директория. cd livecd/source/usr/ tar jxvf ~/portage-whatever.tar.bz2 Ако има нужда от изтеглянето на допълнителни пакети по време на инсталацията, се погрижете да настроите необходими за работа в интернет файлове в 'livecd/source/etc'. Например 'resolv.conf'. С това вашата 'source' директория е готова за инсталирането на Gentoo. == Инсталиране на Gentoo == Монтирайте необходимите ви директории преди да chroot-нете в работната директория и да започнете инсталацията. Например, за да спестим място ще монтираме 'distfiles' в '/usr/portage'. По този начин ще избегнем тегленето на еднакви (dist) файлове по време на инсталацията. cd livecd/source mount -o bind /proc proc mkdir usr/portage/distfiles mount -o bind /usr/portage/distfiles usr/portage/distfiles Следва 'chroot' в 'source' както и самото инсталиране. Имайте предвид следното, когато правите промени в '/etc/make.conf' # Бъдете внимателни в избора си на USE флаговете. Колкото повече флагове използвате, толкова повече ще расте вашето обкръжение. Възможно е размера да нарастне толкова, че да не се събере на едно CD! В случай че използваме само KDE и не се интересуваме от документация и java, можем да добавим '-gnome -gtk -java -doc' в списъка с флагове # Проверете че ИМАТЕ 'livecd' в USE флаговете. Този флаг, заедно със 'cdroot' параметъра, който се предава на ядрото по време на зареждане на състемата, ще осигури че инициализиращите скриптове „знаят“, че стартираме системата от CDROM, и че няма да правят грешки като проверка на 'root' файловата система. Това са и самите стъпки: cd livecd/source chroot . /bin/bash --login env-update source /etc/profile emerge -e system ln -sf /usr/share/zoneinfo/<path to time zone file> /etc/localtime emerge <желаните от вас пакети, например logger hotplug udev> rc-update add <нобходимите services, например hotplug, net.eth0, sysklogd> default <или boot, по ваш избор> emerge <допълнителни пакети, по ваш избор, например kde mplayer> Преди да инсталираме ядрото и зареждащия мениджър, нека да модифицираме някоко важни файла в '/etc'. Първо, fstab /dev/loop0 / squashfs ro,defaults 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /dev/pts devpts defaults 0 0 Проверете, че има празен ред в края на файла или livecd-то няма да тръгне! Обърнете внимание, че монтираме root върху loop устройство, използвайки 'squashfs' файлова система, повече по въпроса след малко. Оправете останалите файлове в '/etc' в зависимост от вашите предпочитания (например hostname, rc.conf, conf.d/* и т.н.). Подгответе желаното от вас ядро за инсталиране. Добавете желаните от вас кръпки (например vesafb-tng, reiser4, mppe-mppc и т.н.). Ще ни се наложи да използваме [http://squashfs.sourceforge.net squashfs] като root файлова система. Затова се уверете, че ядрото има необходимата поддръжка, и ако трябва я добавете. Освен това описания тук подход предполага, че зареждането става от IDE cdrom. При конфигурирането на ядрото се уверете че изброените по-долу са включени: # squashfs filesystem # iso9660 cdrom filesystem # initrd support, set size to 8MB # loopback block device support # IDE/ATAPI cdrom device support # ext2 filesystem support (която се използва за нашия initrd образ) # tmpfs filesystem support emerge development-sources #ако е необходимо добавете кръпките след тази стъпка cd /usr/src/linux make menuconfig #конфигурация на ядрото make bzImage modules modules_install cp arch/i386/boot/bzImage /boot/vmlinuz Последна стъпка е изтегляне и конфигуриране на зареждащия менажер. Използвайте възможно най-новия GRUB (0.96.xxx или по-нов), тъй като той ще има поддръжка за зареждане от cdrom. Следват '/boot/grub/grub.conf' или '/boot/grub/menu.lst', като след малко ще се върнем към тях отново. default 0 timeout 5 splashimage=(cd)/boot/grub/splash.xpm.gz title=Gentoo Linux root (cd) kernel (cd)/boot/vmlinuz video=vesafb:1024x768-32 root=/dev/ram0 rw init=/linuxrc cdroot initrd (cd)/boot/initrd Не забравйте да изтриете символната връзка boot/grub/menu.lst и да преименувате grub.conf на menu.lst, защото iso9660 не поддържа връзки (symlinks). В противен случай ще свършите с празен терминал! Можете да не използвате 'video' параметъра, но останалите са необходими. Следващата стъпка е създаването на 'initrd' образ. == Създаване на initrd образа == Тук се случват повечето от нещата по време на зареждането (boot). Ще се уверите че не е толкова трудно, след като разберете какво точно става. Първо създайте образа, в конкретния случай е използван размер от 8MB за initrd, при нужда размера може да се увеличи, но не забравйте в такъв случай да зададете правилната конфигурация в ядрото, която отговаря за максималния ramdisk размер. touch /boot/initrd dd if=/dev/zero of=/boot/initrd bs=1024k count=8 losetup /dev/loop0 /boot/initrd mke2fs /dev/loop0 mkdir /mnt/initrd mount /dev/loop0 /mnt/initrd А сега запълнете образа с необходимите директории и файлове: cd /mnt/initrd mkdir etc dev lib bin proc new cdrom touch linuxrc chmod +x linuxrc touch etc/mtab touch etc/fstab linuxrc е скрипта, който се изпълнява по време на зареждането (boot) на линукс. Повече по въпроса след малко. Трябва да копираме необходимите файлове в bin и lib. За bin, копирайте следните: /bin/sh /bin/cat /bin/mount /bin/umount /bin/mkdir /bin/chroot /bin/tar /bin/ls /sbin/pivot_root За lib. ще трябва да намерим кои библиотеки са използвани от по-горните бинарни файлове. Това може да стане като се изпълни 'ldd' за всеки от бинарните файлове и се копират съответните библиотеки. Например: ldd /bin/mount linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0x4002e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) cp /lib/libc.so.6 /mnt/initrd/lib/ cp /lib/ld-linux.so.2 /mnt/initrd/lib/ Повторете за останалите бинарни файлове. Кратък но вършещ добра работа скрипт ще направи това за вас: #!/bin/sh for x in sh ls cat mount umount mkdir chroot tar do cp -v /bin/${x} /mnt/initrd/bin done cp -v /sbin/pivot_root /mnt/initrd/bin cd /lib for x in sh ls cat mount umount mkdir chroot tar do cp -v `ldd /bin/${x}|egrep lib|cut -d "=" -f1` /mnt/initrd/lib done cp -v `ldd /sbin/pivot_root|egrep lib|cut -d "=" -f1` /mnt/initrd/lib Да създадем и необходимите устройства в dev директорията: mknod /mnt/initrd/dev/console c 5 1 mknod /mnt/initrd/dev/null c 1 3 mknod /mnt/initrd/dev/hda b 3 0 mknod /mnt/initrd/dev/hdb b 3 64 mknod /mnt/initrd/dev/hdc b 22 0 mknod /mnt/initrd/dev/hdd b 22 64 mknod /mnt/initrd/dev/tty c 4 0 mknod /mnt/initrd/dev/loop0 b 7 0 И най-накрая, трябва да направим наш linuxrc скрипт. Скрипта ще се погрижи за следното: * Да запомни какво е зададено на ядрото и по-късно да го зададе на /sbin/init * Да открие CDROM устройството (претърсваме само hda, hdb, hdc, hdd и cdroms/cdrom*, който са най-често срещаните IDE cdrom устройства) * Да монтира cdrom на /cdrom * Да монтира образа който използва squash файлова система (това е всъщност нашата gentoo инсталация събрана в един файл) на /new. Това ще е представлява нашата root файл система, която е позволена само за четене * Да създаде необходимите позволени за четене и записване mount points (etc, var, tmp и root) като tmpfs файлова системи и да ги попълни * Да насочи (pivot) root файловата система към newroot и да започне същинския init процес #!/bin/sh export PATH=/bin # Get kernel CMDLINE mount -t proc none /proc CMDLINE=`cat /proc/cmdline` umount /proc # Mount CD device CDROM="" for x in hda hdb hdc hdd cdroms/cdrom0 cdroms/cdrom1 cdroms/cdrom2 cdroms/cdrom3 do mount -t iso9660 -r /dev/${x} /cdrom > /dev/null 2>&1 if [ "$?" = "0" ] then CDROM="${x}" break fi done # CD not found if [ "${CDROM}" == "" ] then exec /bin/sh exit fi # Mount root and create read-write directories mount -t squashfs -o loop /cdrom/files/source.img /new > /dev/null 2>&1 mount -t tmpfs -o size=32m none /new/var > /dev/null 2>&1 mount -t tmpfs -o size=32m none /new/etc > /dev/null 2>&1 mount -t tmpfs -o size=32m none /new/tmp > /dev/null 2>&1 mount -t tmpfs -o size=32m none /new/root > /dev/null 2>&1 cd /new/var && tar xpf /cdrom/files/var.tar > /dev/null 2>&1 cd /new/etc && tar xpf /cdrom/files/etc.tar > /dev/null 2>&1 cd /new/root && tar xpf /cdrom/files/root.tar > /dev/null 2>&1 # Pivot root and start real init cd /new pivot_root . newroot exec chroot . /bin/sh <<- EOF >dev/console 2>&1 exec /sbin/init ${CMDLINE} EOF Обърнете внимание, че използваме 4 x 32MB tmpfs файлови системи. Това изисква доста памет. При необходимост можете да намалите този размер. С това сме готови! Нашата source директория е готова. Но преди да продължим трябва да направим няколко малки промени. Първо, '/var' съдържа 'cache' и 'db' директориите, които са използвани от portage. Тези директории са големи, така че ще ги преместим в '/usr/lib/portage' за да спестим място на '/var' cd /var mv cache db /usr/lib/portage/ ln -s /usr/lib/portage/cache cache ln -s /usr/lib/portage/db db И второ, ако използвате 'udev' за управление на устройствата както в конкретния случай, и ако искате gentoo да запазва състоянието на устройствата преди рестартиране, трябва да направите следното: cd /lib mv udev-state /var/lib ln -s /var/lib/udev-state udev-state Това се налага, защото /lib не е позволена за писане на нашето CD! С това завършихме работата в нашата source директория. Излезте от 'chroot' и unmount proc и distfiles. Следва направата на самото CD! == Направа на LiveCD == Направата на LiveCD включва следните стъпки: # Почистване на не нужните директории в source (като /tmp и /var/tmp) # Създаването на target директория, която ще се използва при направата на iso образа # Запазването на read-write директориите (като /etc и /var) използвайки tar, в target # Преобразуването на source директорията в squash образ, използвайки squashfs tools # И най-накрая, направата на iso образа За да си помогнем с автоматизирането на тези стъпки, направете 'build' скрипта и го запомнете в 'livecd' cd livecd touch build chmod +x build Следва и самият скрипт <pre> #!/bin/bash rm -rf target mkdir target cp -a source/boot target/ mkdir target/files rm -rf source/var/tmp/* rm -rf source/var/run/* rm -rf source/var/lock/* rm -rf source/tmp/* rm -f source/etc/mtab touch source/etc/mtab cd source/etc/ tar cvpf ../../target/files/etc.tar * .[[:alnum:]]* cd ../var/ tar cvpf ../../target/files/var.tar * .[[:alnum:]]* cd ../root/ tar cvpf ../../target/files/root.tar * .[[:alnum:]]* cd ../../ mksquashfs source/ target/files/source.img mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -iso-level 4 -hide boot.catalog -o ~/livecd.iso target/ </pre> Убедете се че последният ред в скрипта (започващ с mkisofs) е наистина запомнен на един ред. Винаги проверявайте, че размера на всеки от създадените tar файлове е по-малък от размера на tmpfs ram устройството, което създадохме преди това (32MB в конкретния случай). Squash-ването на голяма 'source' директория отнема време, така че бъдете търпеливи. След като сте готови и с това, запишете вашия ISO образ, boot-нете от него, и му се наслаждавайте :) == Съвети == Може да използвате следния скрипт за да chroot-вате когато имате нужда на синхронизирате portage, използвате нови пакети или да направите някакви промени във вашето обкръжение. Скриптът е наречен 'work' cd livecd touch work chmod +x work Следва самият скрипт: #!/bin/bash mount -o bind /proc source/proc mount -o bind /sys source/sys mount -o bind /dev source/dev mount -o bind /dev/pts source/dev/pts mount -o bind /usr/portage/distfiles source/usr/portage/distfiles chroot source/ /bin/bash --login umount source/proc umount source/sys umount source/dev/pts umount source/dev umount source/usr/portage/distfiles Не забравйте след изпълнение на скрипта, когато се намирате вече в chroot обкръжението да изпълните: env-update source /etc/profile Това се налага, защото този прост скрипт не може да дава команди на новото обкръжение, но може да unmount-ва, изпълнете env-update и source /etc/profile след като напуснете обкръжението. Монтирането на /dev е важно за правилната работа на X и други от chroot обкръжението. Друго нещо което може да се вземе под внимание е размера на source директорията. Както може да се досетите, там има неща които заемат доста място без да се необходими на LiveCD-то. Такива са например '/usr/src' и '/usr/portage'. Ако не искате да ги включите във вашето LiveCD, не ги изтърквайте, а вместо това използвайте опция на 'mksquashfs', която ви позволява да изключите директории по ваше желание от squash-натия образ. По този начин ще запазите съдържанието на source директорията непроменено. Ако зареждането от CD-то спира по някаква неизвестна причина по време на изпълнение на linuxrc скрипта, можете да промените реда в GRUB на 'init=/bin/sh' вместо 'init=/linuxrc'. Това ще ви даде възможност да работите в малка обвивка отворена в initrd образа. Там ще можете да изпълните командите от linuxrc скрипта една по една и по този начин ще имате възможност да откриете къде и какъв е проблема. Няма нужда от bootstrap-ване на системата ви, CD-to ще работи както от bootsrap-ната така и от не-bootsrap-нати системи. Надявам се, че ще намерите тази статия полезна. Вашите поправки/коментари са винаги добре дошли. == Автоматично логване == Това е лесно да се направи. Инсталирайте mingetty. После редактирайте /etc/inittab на CD-то (направете копие на оригинала). Намерете: c1:12345:respawn:/sbin/agetty 38400 tty1 linux и го заместете с c1:12345:respawn:/sbin/mingetty --autologin root --noclear tty1 за вяко tty за което искате да имате автоматично логване като root. Ако получите грешка "Session opened for ....." при стартиране на CD-то, инсталирайте syslogger и го направете да стартира при boot-ването. == Алтернативни Скриптове == Това е леко изменен 'build' скрипт: <pre> #!/bin/bash rm -rf target mkdir target cp -a source/boot target/ mkdir target/files mkdir target/files/source cp -p -R -P -d source/ target/files rm -rf target/files/source/var/tmp/* rm -rf target/files/source/var/run/* rm -rf target/files/source/var/lock/* rm -rf target/files/source/var/cache/* rm -rf target/files/source/var/db/* rm -rf target/files/source/tmp/* rm -f target/files/source/etc/mtab touch target/files/source/etc/mtab rm -rf target/files/source/usr/portage rm -rf target/files/source/usr/lib/portage rm -rf target/files/source/usr/share/doc rm -rf target/files/source/root/.mc rm target/files/source/root/.bash_history rm target/files/source/var/log/emerge.log cd target/files/source/etc/ tar cvpf ../../../../target/files/etc.tar * .alnum:* cd ../var/ tar cvpf ../../../../target/files/var.tar * .alnum:* cd ../root/ tar cvpf ../../../../target/files/root.tar * .alnum:* cd ../../ mksquashfs source/ source.img rm -rf source/ cd ../../ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -iso-level 4 -hide boot.catalog -o ~/livecd.iso target/ </pre> Скриптът копира цялата Gentoo инсталация в нова директория (livecd/target/files), изтрива документацията (но не и man страниците), и emerge системата (включително portage tree). Крайният резултат е с около 50MB по-малък, но затова пък отнема с около 20 минути повече време. == Последна промяна & Други == {{CURRENTDAY}} - {{CURRENTMONTHNAMEGEN}} - {{CURRENTYEAR}}, {{CURRENTTIME}} Искам да благодаря на [http://forums.gentoo.org/profile.php?mode=viewprofile&u=34942 veezi], който свърши повечето от нобходимата работата и започна първоначалната [http://forums.gentoo.org/viewtopic.php?t=244837 дискусия] в официалните gentoo форуми. == Външни препратки == * [http://gentoo-wiki.com/HOWTO_build_a_LiveCD_from_scratch Оригиналната статия] * [http://gentoo-wiki.com/HOWTO_Index http://gentoo-wiki.com/HOWTO_Index] [[Категория:ГНУ/Линукс]] [[Категория: Gentoo Linux]] oz6pchudhpvo8yialldgtqp9x5ojee8