HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Gyártsunk saját live dvd-t!

2008.09.11. 13:38 bagoj ur

Sze'ntem menő dolog "saját linux terjesztést" gyártani, illetve egy meglévő linux terjesztést felhasználni arra, hogy az alapértelmezett alkalmazásokat mi határozzuk meg, majd ebből telepítővel ellátott livecd-t készítsünk.

Nincs szükségem az Ekigára, az Evolution levelezőre, a Transmission bittorrent kliensre, az f-spotra, az Eye of the Gnome-ra, a Totemre, a Sane-re... sorolhatnám. Kellene egy Thunderbird, egy mplayer, esetleg Skype. Mégis minden friss telepítéskor (ilyen mondjuk nem nagyon fordul elő a napi használatú gépen, hiszen mindig csak frissítek) ezeket az eltávolításokat és friss telepítéseket újra meg kell tenni. Wnidowsra léteznek eszközök, amelyekkel testreszabott telepítőt készíthetünk - akkor Ubuntura is kell lennie. Ez az ötletem aztán be is jött.

A könnyű út

Azért veszem előre a könnyű utat, mert aki amúgy se olvasná végig a postot, annak pontosan tökéletes a program, amit ajánlok. :-) Ez pedig a remastersys, amely csak Ubuntu, vagy abból leszármaztatott (*buntu, Mint stb.) terjesztésekre működik. A Klikit Linux terjesztés (amely egy Kubuntu + néme feltúrbózott tartalom) fejlesztői készítették ezt a varázslatosan konzseniális eszközt arra, hogy az izgalomtól sikongatva villámgyorsan készíthessünk futó rendszerünkről backupot vagy livecd-t. Értelemszerűen a backup később visszaállítható, bár ha jól olvasom, kell hozzá egy kis tudás... :-) Olyat még nem csináltam, de fogok.

Megjegyzések:
1. Más terjesztésre nincs ilyen? De, PCLinuxOS-re remasterme; a Mandriva alatt mklivecd néven fut hasonló. Az alapötlet a Mandrivás fiúktól jött.
2. De minek a rögös út? Hát, mert úgy tanul az ember, ha szív. :-)
3. Az ugye mindenkinek világos, hogy kb. dupla annyi helyre van szükség, mint az aktuális fájlrendszer. Kevesebb hellyel bele se kezdjünk...

A Remastersys ugyan nincs benne az alapértelmezett Ubuntu terjesztésben, de ez minket a legkevésbé sem fog zavarni:

bagoj@mycogen:~# echo "deb http://www.remastersys.klikit-linux.com/repository remastersys/" > /etc/apt/sources.list.d/remastersys.list && apt-get update
bagoj@mycogen:~# apt-get install remastersys
bagoj@mycogen:~# remastersys dist bagoj.iso
Mint látható, rootként dolgoztam. Ha a dist kulcsszót használjuk, akkor az elkészült live cd nem fogja tartalmazni a felhasználóinkat, tehát terjeszthető bárki számára. Ha viszont a backup kulcsszót használjuk, akkor figyelmeztetek mindenkit, hogy a felhasználók is át fognak kerülni! Tehát a dist-et leginkább egy friss telepítéssel érdemes elkövetni; a livecd-n egy custom nevű felhasználó jön ekkor létre, jelszó nélkül. A backup viszont át fogja vinni a saját beállításunkat, ami mindenképpen nagy fegyvertény tud lenni.

Az ISO elkészültével esetleg érdemes törölni a létrehozott ideiglenes fájlokat:

bagoj@mycogen:~# remastersys clean

 Ennyit a könnyű útról. :-) A nemrégiben elkészített rendszeren az ISO mérete mindössze 345 Mb lett (!!!). Most pedig leírom, hogy nagyjából hogyan kell ugyanezt kézzel megcsinálni (a program is hasonló elven működik).

(Ja, még egy megjegyzés: A menübe is bekerül a remastersys, de hiába kattintunk rá nem fog elindulni, csak parancssorból. Ennek oka, hogy a menüből a remastersys-gui-t indítaná, de annak fel kell tenni a zenity csomagot, ha még nincs fent; viszont ez a függőségeiben nincs benne.)

A rögös út

A livecd nem csak arra jó, hogy meg lehessen nézni előzetesen egy rendszert, mielőtt telepítjük, bár kétségkívül most a divat ezt mutatja. Régebben ezek a bootolható lemezek a rendszerek helyreállításában játszottak nagy szerepet, akár úgy, hogy valamilyen konfigurációs hibát állítottunk helyre, rosszabb esetben mentésből kellett visszarakni a rendszert. Mindez, úgy gondolom, ma is érvényes.

  1. Egy livecd tartalmazza a teljes könyvtárszerkezetet, amit az elő rendszer; valamilyen tömörített fájlrendszeren (hiszen a méret eléggé kötött), általában ez squashfs.
  2. Mivel a CD/DVD csak olvasható, létre kell hozni a memóriában egy fájlrendszert, amire a Linux tud írni; hiszen a /proc, /dev, /var és /tmp alá létre kell tudni hozni a fájlokat. Gondoljuk csak meg, hogy a livecd-k lehetővé teszik akár új csomag telepítését is (oké, hogy el fog veszni a kikapcsolás után, de van rá lehetőség), ehhez mindenképp hozzá kell engedni a felhasználót írásra a fájlrendszerhez. Erre találták ki a unionfs-t is, aminek összehozásával már próbálkoztam ([1] [2]) én is.
  3. A júzernek, aki a livecd-t használja, lehet sokféle (akár egyszerre több) CD/DVD-olvasója - tudnunk kell kezelni a gyökér fájlrendszer megkeresésének problémáját, valamint a megfelelő kernel modulok betöltését. Ehhez természetesen a boot előtti boot módszerét, azaz az initramfs-t fogjuk használni, amiről feltünően sokszor szoktam én is beszélni, és amely már Münchausen óta ismert. Az initramfs biztosítja a legelső gyökér fájlrendszert, és biztos pontként szolgál. Jó, hogy feltalálták...

A livecd fájlszerkezete tartalmazza az élő rendszer teljes fájlrendszerét, tömörített állapotban. Ezen felül ott kell legyen egy grub konfiguráció, egy kernel, és az initramfs, amely a kezdeti bootot végzi; ez általában egy initrd.gz nevű fájl.

Szükség van néhány eszközre, ezeket telepítsük fel:

apt-get install mkisofs grub squashfs-tools linux-ubuntu-modules-$(uname -r)

1. Livecd könyvtárszerkezet létrehozása

Elkészítjük a könyvtárszerkezetet az élő rendszerből. Az initramfs legyártásához szükséges szkripteket megírhatnánk elölről, de miért tennénk, amikor mások megtették. A legnépszerűbb ilyen szkriptgyűjtemény a casper, amely ugyanezen a néven elérhető .deb formátumban is (le is fogjuk szedni). Ezek után már csak egy update-initramfs parancsra lesz majd szükségünk.

Első (igazi) lépésként elkészítjük a könyvtárakat, amiben dolgozni fogunk (ez egy chrootolt környezet). A squashfs helyére írhatunk ext2-t is, ha nem akarunk tömörítést, ekkor gyorsabb lesz a boot, de 90% hogy DVD-re lesz majd szükségünk. (Ext3-at értelemszerűen NE írjunk, aki ezt nem érti, kérem ne válassza a rögös utat). A WORK és CD változók csak azért kellenek, hogy ne kelljen annyit gépelni. :)

export WORK=~/work
export CD=~/livecd
export FORMAT=squashfs
export FS_DIR=casper

A livecd/casper, livecd/boot/grub, work/rootfs könyvtárak létrehozása:

sudo mkdir -p ${CD}/{${FS_DIR},boot/grub} ${WORK}/rootfs

Ezek után másoljuk le a fájlrendszerünket a ~/work/rootfs alá:

sudo rsync -av --one-file-system --exclude=/proc/* --exclude=/dev/* \
 --exclude=/sys/* --exclude=/tmp/* --exclude=/home/* \
 --exclude=/lost+found / ${WORK}/rootfs

Az érthető, hogy a /proc, /dev, /sys, /tmp, /lost+found könyvtárakat kihagytuk, hiszen ezekben olyan fájlok vannak, amit majd boot közben hozunk létre. A /home-ról mindjárt beszélek. De előbb: Ha a /boot (vagy egyéb, amelyre szükségünk van) partíciónk külön van, azt is le kell másolnunk. Példa a /boot lemésolására:

cp -av /boot/* ${WORK}/rootfs/boot

Értelemszerűen behelyettesíthetjük pl. a /var lekopírozására.

No és mi lesz a /home-mal? Mivel nem feltétlenül akarjuk az összes felhasználónkat belemásolni a livecd-be, ezért a vak másolás helyett gondolkodjunk; először tegyük át csak a számunkra fontos beállítsokat:

sudo cp -rpv --parents /home/bagoj/.mc/ /home/bagoj/.config/ /home/bagoj/.mplayer/ /home/bagoj/.mozilla/ /home/bagoj/Desktop  ${WORK}/rootfs/etc/skel

Az /etc/skel alatt vannak azok a fájlok ugyebár, amelyeket az újonnan létrejövő felhasználók home könyvtárába a Linux bemásol, azaz ezek lesznek az alapértelmzetett beállításai. Ezzel igen sokat el lehet molyolni, én most ugrok a következő lépésre, ami a chroot környezet létrehozása, amiben a beállításokat véglegesítjük:

mount -o bind /dev/ ${WORK}/rootfs/dev
mount -t proc proc ${WORK}/rootfs/proc
chroot ${WORK}/rootfs /bin/bash

Azért egy pillanatra ilyenkor mindig elgondolkodom, hogy mennyire egyszerű egy működő linuxot készíteni egy másik linuxon belül. :-) Node dolgozzunk tovább, az alábbi csomagokra szüksége lesz a livecd-nek (az ubiquity az a livecd telepítő; ha nem akarjuk hogy telepíteni lehessen a livecd-nket merevlemezre, kihagyhatjuk, de szerintem nem érdemes). Nyilván itt még bármi mást is telepíthetünk:

apt-get install casper discover1 xresprobe ubiquity
depmod -a $(uname -r)
update-initramfs -u -k $(uname -r)

 Az initramfs (ez már casper-es lesz!) legyártása után eltávolítjuk a /etc/passwd fájlból a rendszerbe felvitt, nem rendszerszintű felhasználókat. Erre jó alkalmat ad, hogy a system felhasználók id-je 1000 alatti, utána jönnek az interaktív felhasználók; úgyhogy egy kis szkriptet fabrikálunk erre:

for i in `cat /etc/passwd | awk -F":" '{print $1}'`
do
        uid=`cat /etc/passwd | grep "^${i}:" | awk -F":" '{print $3}'`
        [ "$uid" -gt "999" -a  "$uid" -ne "65534"  ] && userdel --force ${i} 2>/dev/null
done

Ez értelemszerűen csak "gép a gépben", tehát a lemásolt linuxon fog történni, de azért ellenőrizzük le hogy biztosan a chroot környezetben vagyunk-e! Szükséges még néhány rendszerfájl eltávolítása, amelyek egy livecd-s környezetben problémát okozhatnak:

rm /etc/hosts /etc/hostname /etc/resolv.conf /etc/timezone /etc/fstab /etc/mtab /etc/shadow /etc/shadow- /etc/gshadow  /etc/gshadow- /etc/gdm/gdm-cdd.conf /etc/gdm/gdm.conf-custom /etc/X11/xorg.conf /boot/grub/menu.lst /boot/grub/device.map
apt-get clean
find /var/run /var/log /var/mail /var/spool /var/lock /var/backups /var/tmp -type f -exec rm {} \;
rm -r /tmp/* /root/* 2>/dev/null
[ -f "/etc/gdm/factory-gdm.conf" ] && cp -f /etc/gdm/factory-gdm.conf /etc/gdm/gdm.conf 2>/dev/null

(pl. a resolv.conf-ban vannak a DNS szerverek, ki tudja hogy ezek elérhetők-e majd minden esetben. Lehet, hogy más időzónában fogják használni, ezért a timezone sem maradhat. A gdm egyedi beállítások akadályozhatják a livecd autologinját stb.)

Hogy ne csak romboljunk, létrehozunk pár logfájlt, amire viszont szükség lesz:

touch /var/log/{dpkg.log,lastlog,mail.log,syslog,auth.log,\
daemon.log,faillog,lpr.log,mail.warn,user.log,boot,debug,mail.err,\
messages,wtmp,bootstrap.log,dmesg,kern.log,mail.info}

2. Ubiquity dolgai

Ahogyan írtam korábban, az Ubiquity használata opcionális - ez tudja telepíteni a livecd tartalmát a merevlemezre. Ennek megfelelő működéséhez szükség van két fájl előállítására, amelyek tartalmazzák a csomaglistát (a filesystem.manifest tartalmaz minden csomagot, és a filesystem.manifest-desktop csak a feltelepítendő csomagokat). Ezt az Ubuntu is nyilván ugyanígy csinálja. Tehát ezt a fejezetet csak akkor kell végigcsinálni, ha akarunk telepítőt!

dpkg-query -W --showformat='${Package} ${Version}\n' | tee ${CD}/${FS_DIR}/filesystem.manifest
cp -v ${CD}/${FS_DIR}/filesystem.manifest{,-desktop}
for i in 'ubiquity casper live-initramfs user-setup discover1 xresprobe os-prober libdebian-installer4'; do sed -i "/${i}/d" ${CD}/${FS_DIR}/filesystem.manifest-desktop; done

3. Kilépés a chrootból

Ezután exit-tel lépjünk ki a chroot-ból, készen vagyunk.

4. A Livecd előkészítése

Megvan a könyvtárszerkezet, most a kis összefoglaló szerint előkészítjük a CD bebootolásához szükséges kernelt és initrd-t.

cp -vp ${WORK}/rootfs/boot/vmlinuz-$(uname -r) ${CD}/boot/vmlinuz
cp -vp ${WORK}/rootfs/boot/initrd.img-$(uname -r) ${CD}/boot/initrd.gz
cp -vp ${WORK}/rootfs/boot/memtest86+.bin ${CD}/boot

 Ez a harmadik sor nem igazán feltétlenül szükséges; csak arra kell hogy a livecd-vel (az Ubuntu livecd-hez hasonlóan) tudjuk a memóriát is tesztelni. Mivel én ezt jó dolognak tartom, belerakom. Umountoljuk a chroot miatt felmountolt könyvtárakat:

umount ${WORK}/rootfs/dev ${WORK}/rootfs/proc


...majd készítsük el a squashfs fájlrendszert a könyvtárszerkezetünkből:

mksquashfs ${WORK}/rootfs ${CD}/${FS_DIR}/filesystem.${FORMAT}

Másoljuk a Grubot a helyére:

cp -v /usr/lib/grub/i386-pc/stage2_eltorito ${CD}/boot/grub

 Megjegyzés: igazából ez az utolsó sor elég Ubuntu- és PC-specifikus lett. Szebb, ha a következő sort alkalmazzuk:

find /boot /usr/lib/grub/ -iname 'stage2_eltorito' -exec cp -v {} ${CD}/boot/grub \;

és akkor máris platformfüggetlenek lettünk.

Most meg kell szerkesztenünk a grub menü fájlját. Ehhez mindenki alkalmazza a kedvenc editorát; én a vi-t fogom. A lényeg, hogy a következő kerüljön a ${CD}/boot/grub/menu.lst fájlba:

default 0
timeout 20

title                Linux inditasa grafikus modban (alapertelmezett)
kernel                /boot/vmlinuz BOOT=casper boot=casper persistent rw quiet splash
initrd                /boot/initrd.gz

title                Linux inditasa Safe modban
kernel                /boot/vmlinuz BOOT=casper boot=casper xforcevesa rw quiet splash
initrd                /boot/initrd.gz

title                Linux inditasa szoveges modban
kernel                /boot/vmlinuz BOOT=casper boot=casper nopersistent textonly rw quiet
initrd                /boot/initrd.gz

title                Memoriateszt
kernel                /boot/memtest86+.bin
5. Az ISO fájl legyártása

Először is készítünk egy md5 fájlt, amely a többi fájl ellenőrző összegét tartalmazza, így könnyen ellenőrizhető, hogy megsérült-e valami a lemezen. Ezután pedig legyártjuk az ISO fájlt, amelyet utóbb kiírhatunk tetszőleges programmal:

cd $CD && find . -type f -print0 | xargs -0 md5sum | tee ${CD}/md5sum.txt
mkisofs -b boot/grub/stage2_eltorito \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-V "Bagoj Linugz" -cache-inodes -r -J -l \
-o ~/live-cd.iso $CD

A "Bagoj Linugz" helyére tetszőleges szöveg helyettesíthető (betartva az ISO9660 szabályait). :-)

6. Takarítás

Ha kipróbáltuk a CD-t (VMWare, Virtualbox, qemu...) és minden faja, akkor letörölhetjük a munkakönyvtárainkat:

rm -r ~/work ~/livecd

 Talán ez az út sem olyan rögös, nemigaz? ;-)

12 komment

Címkék: linux backup ubuntu boot fájlrendszerek konfigurálás unionfs livecd livedvd

A bejegyzés trackback címe:

https://bagojur.blog.hu/api/trackback/id/tr34657508

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

bagoj ur 2008.09.11. 15:39:20

Az eredeti link, amely a remastersys oldaláról is elérhető: www.remastersys.klikit-linux.com/capink.html

bagoj ur 2008.09.17. 15:31:31

Huh, rájöttem hogy hogyan van:

1. Ha backupot készítünk remastersys-szel (remastersys backup), akkor megmaradnak a felhasználók

2. Ha disztribúciót (remastersys dist) akkor nem maradnak meg a személyes adatok, csak egy custom felhasználó lesz a cd-n, ami pár beállítást örökölhet.

Elnézést a tévedésért...

atomgape 2008.10.06. 13:50:32

Akkor jól értem, hogy lehet futtatni a remastersys backup backup.iso, vagy a remastersys dist dist.iso parancsot, és az első esetben a felhasználókról is mentést készít és ugyanez telepíthető egy másik diszkre is? A második esetben pedig egy saját disztribúciót gyárt az általam kiválasztott programokkal?

Bocsánat, de nem egyértelmű, angolul pedig csak mérsékelten tudok.

bagoj ur 2008.10.07. 07:35:51

@atomgape: teljesen jól érted, így van!

windowskiller · http://alpinwork.extra.hu 2008.11.29. 15:30:15

üdw mindenkinek.
én megcsináltam a DIST opcióval a cuccost, ki akartam írni dvd-re, de nem sikerült az írás, egyszerűen leállt az egész.
a dist készítése közben semmi hibaüzenet nem keletkezett.

környezet:
asus epc 701, a remasterss könyvtára egy 4gb-os sdkártya ext3-ra formázva, maga a rendszerem 1.2 gb, furcsamód az iso is majdnem ennyi.

kesseket ürítettem, tmp könyvtárakat is.

nem tom mi lehet a baj.

iso-t már megtanultam bootolhatóvá téve kiírni sdkártyára, de mivel nekem a saját rendszerem kell egy esetleges reinstallnál, marhajóenne, ha ez a remastersys-es cucc működne.

köszasegítséget

windowskiller · http://alpinwork.extra.hu 2008.11.30. 12:08:34

nos, sikerült az iso-t bootolhatóvá tenni.

csak a memtest indul el és livecd-ként is működik a cucc, de livecd esetén elképesztő módon felhasználónevet és jelszót is kér, ez persze semmivel sem megy, még a "custom" vagy a root-ra sem reagál.
járt már valaki hasonlóképp?

bagoj ur 2008.11.30. 23:34:23

windowskiller: Na ez érdekes. Ha belenézel az ISO-ba (nekem a Midnight Commander simán belelép, egyébként meg rootként mount -o loop valami.iso ), van benne egy casper könyvtár, abban meg egy filesystem.squashfs fájl. Ez a teljes fájlrendszer. Ezt is fel tudod mountolni rootként egy tetszőleges (lehetőleg üres) könyvtárba, pl. mount -o loop ./filesystem.squashfs /home/bagoj/AAA és akkor látod benne, hogy a /etc könyvtárban nincs is shadow fájl. A /etc/casper.conf-ban meg ott van, hogy hozzon létre egy ideiglenes felhasználót, custom néven. De ennek nem hoz létre semmilyen jelszót... más szóval: nem, még nem jártam így és ötletem sincs, mi lehet. Az ISO fájlodat letölteni meg nekem lenne vagy 2 nap, mert elég szerény itthon a net úgyhogy azt a megoldást hanyagoljuk. Viszont tényleg érdekelne, mi lehet a probléma. :-(

body007 2009.10.18. 11:10:35

Üdvözlet Mr. Bagoly :)

Nem tudod véletlen, h milyen csomag kellene a rendszerbe, h remaster után - telepítésnél - felímerje a raid tömböt? Arra rátaláltam, h "Ubuntu 9.04 Alternate" cd-vel kiválasztható a tömb, de én a saját rendszerem szertném vissza, nem egy új telepítést :) Egyáltalán mi az a alternate cd? Mi van abban ami az én rendszeremben nincs?

bagoj ur 2009.10.18. 12:03:46

@body007: Először is tudni kéne, milyen raid - gondolom, alaplapi hardveres. A gond valszeg az, hogy az Ubuntu livecd initrd-jében nincs hozzá támogatás, valószínűleg az alternate-ben pedig benne van. Az alternate egyébként annyiban különbözik, hogy ott nincs live bootolhatóság, csak telepíteni lehet és kicsit jobban testreszabhatók a csomagok.

A lényeg, hogy nem kifejezetten egy csomag hiányzik, hanem valszeg az initrd-t kell átalakítani. A kérdés az, hogy telepítéskor nem volt ezzel problémád? Mert akkor is kellett lennie, hiszen a remastersys csak egy egyedi másolatot készít egy live cd-ről. Szóval azt is jó lenne tudni hogy akkor mit hogyan csináltál.

body007 2009.10.18. 18:30:43

@bagoj ur: Igen, alaplapi raid. Telepítve egy vinyóra lett, most vinném át raid-re.

Ez egy Gigabyte GA-MA790X-DS4 lap, a gyártó oldaláról:

... Integrated SATA 3Gb/s with RAID function ...
és
... South Bridge:
1 x IDE connector supporting ATA-133/100/66/33 and up to 2 IDE devices
4 x SATA 3Gb/s connectors (SATAII0, SATAII1, SATAII2, SATAII3) supporting up to 4 SATA 3Gb/s devices
Support for SATA RAID 0, RAID 1 and RAID 0+1 ...

ez egy AMD SB600as északi híd.

lspci idevágó része:
00:12.0 RAID bus controller: ATI Technologies Inc SB600 Non-Raid-5 SATA

Az initrd dolgait még nem igazán vágom, esetleg tudnál segíteni merre induljak?

bagoj ur 2009.10.18. 21:42:51

bagojur.blog.hu/2008/04/07/kernel_forditas_rendszerbetolto_egyebek

Ennek az elején leírtam, mire szolgál az initrd. Én még nem próbáltam olyat, ami Neked kell, mert nem volt rá szükségem, de elméletben ha felteszed az initramfs-tools csomagot, és a /etc/initramfs-tools/modules fájlba belerakod a neked kellő modult, majd a /etc/initramfs-tools/scripts/init-top könyvtárba hozz létre egy fájlt ezzel a tartalommal:

#!/bin/sh
/sbin/modprobe

Ezután futtasd az "update-initramfs -u" parancsot, és elméletileg oké a dolog.
Hogy melyik kernel modul kell Neked, arra a neten tudsz rákeresni legegyszerűbben...

Sajnos ezt a remastersys biztosan nem fogja átvinni az új rendszerre. :-(

body007 2009.10.19. 09:41:59

@bagoj ur: Hát ha nem viszi át a remastersys akkor felejtös sajna :( Mindegy építek új rendszert 9.10ből, az már alternate lesz biztos, köszi a segítséget
süti beállítások módosítása