Si të krijojmë një minishpërndarje Linux në rast emergjence
Mund të ndodhë që për arsye të ndryshme, si për shembull një kernel i ri apo dëmtimi i një disku, të mos arrijmë të nisim dot në menyrë korrekte sitemin tonë Linux.
Për të rivënë në funksion sistemin përdorim, zakonisht, CD e boot të shpërndarjes në përdorim, si p.sh. Slakware apoo Debian, por shpesh këto CD nuk përmbajnë aplikativët me të cilët jemi mësuar të punojmë. Ky është motivi kryesor për të cilin është mirë të kesh në dispozicin një sistem Linux minimum të paisur me të gjithë ato programe që ndihmojnë në ndreqjen e sistemit tonë.
Ekzistojnë script që automatizojnë pjesën më të madhe të punës, si p.sh.:
· Bootkit â⬓
ftp://sunsite.unc.edu/pub/Linux/system/Recovery/ · CatRescue â⬓
ftp://gd.cs.csufresno.edu/pub/sun4bin/src/ · Search and Rescue â⬓
ftp://ftp.icce.tug.nl/pub/unix/ Të gjithë pakot e përmendura më sipër mund t'i gjeni edhe tek
http://freshmeat.net duke bërë një kërkim të vogël.
Në qoftë se dëshironi të keni kontrollin total zgjidhja është të krijojmë vetë disketat e boot.
Një sistem Linux minimum (apo minishpërndarje Linux) duhet të përmbajë një kernel dhe një BootManager (p.sh. Lilo) për të nisur në menyrë korrekte sistemin, dhe një filesystem minimum, por të paisur me të gjithë funksionet në menyrë që t'i japë mundësi përdoruesit të punojë. Një minishpërndarje e tillë mund të qëndrojë:
1. në një disketë (floppy), që do të përmbajë instruksionet për të nisur sistemin dhe një filesystem minimum. Një disketë e tillë quhet Boot/Root;
2. në dy disketa, ku e para (e quajtur Boot) do të përmbajë vetëm instruksionet për të kryer boot, dhe e dyta (e quajtur Root) do të ketë vetëm një filesystem minimum;
3. në një CD, që natyrisht do të përmbajë si instruksionet për kryerjen e boot ashtu dhe filesystem e root.
Zgjidhja e parë prezanton avantazhin e mos qënies së nevojshme të ndërrimit të disketës në nisje, por hapsira do të rezultojë sigurisht e pamjaftueshme për të shtuar të gjithë programet e nevojshëm; zgjidhja e fundit ka avantazhin e zvogëlimit në minimum të kohëzgjatjes së fazës së nisjes, por nga ana tjetër ka svantazhin e madh të pamundësisë së kryerjes së provave të shumta. Prandaj këtu do të studiojmë zgjidhjen e dytë, duke i shtuar po të ketë nevojë një disketë të tretë minishpërndarjes sonë (të quajtur Utility) me programe suplementarë.
Disketa e Boot
Procesi i boot fillon me leximin dhe ekzekutimin e kodit që fillon në sektorin 0, cilindri 0 të dispozitivit të zgjedhur për kryerjen e boot. Në këtë rast ky kod mund të jetë vetë kerneli i kopjuar si më poshtëë në diskun floppy të futur në lexuesin e parë:
shembull# cp /boot/vmlinuz /dev/fd0
Në këtë menyrë kemi kopjuar kernel-in, që ndodhet në directory /boot, me anë të 'raw device'direkt në floppy. Një menyrë tjetër për të bërë një floppy boot-abël është përdorimi i një boot loader (p.sh. Lilo). Gati të gjithë sistemet Linux përdorin Lilo për të nisur sistemin nga disku fiks, por gati të gjithë shpërndarjet përdorin SysLinux, sepse ky i fundit mundëson një kontroll shumë më të thjeshtë të imagjinatave të kompresuara: po të përdorej një filesystem i kopjuar thjesht në disketën e root hapësira e afruar nga një floppy i thjeshtë nuk do të mjaftinte për të kopjuar të gjithë programet; zgjidhja afrohet nga komprimi i filesystem të root në një disketë në menyrë që në nisje ky të lexohet dhe të riformohet në një disk RAM të krijuar posaçërisht.
Gjëja e parë që duhet bërë është kompilimi i një kernel në menyrë të tillë që të jetë sa më i vogël, meqenëse duhet të kopjohet në një disketë: po të jetë e mundur lini jashtë suportin për rrjetet dhe pjesën multimediale; gjithashtu është mirë të evitoni të përdorni modulë, me përjashtim të rastit kur nuk jeni të shtërnguar t'i përdorni. Lista e mëposhtme sjell konfigurimin e kernel të përdorur si shembull:
CONFIG_X86=y
CONFIG_ISA=y
CONFIG_UID16=y
CONFIG_MODULES=y
CONFIG_KMOD=y
CONFIG_M386=y
CONFIG_X86_L1_CACHE
_SHIFT=4
CONFIG_NOHIGHMEM=y
CONFIG_MTRR=y
CONFIG_X86_UP_IOAPI
C=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_LOCAL_AP
IC=y
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG=y
CONFIG_SYSVIPC=y
CONFIG_BSD_PROCESS_
ACCT=y
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=y
CONFIG_PNP=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_
SIZE=16384
CONFIG_BLK_DEV_INIT
RD=y
CONFIG_UNIX=y
CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDED
ISK=y
CONFIG_BLK_DEV_IDEC
D=y
CONFIG_BLK_DEV_CMD6
40=y
CONFIG_BLK_DEV_CMD6
40_ENHANCED=y
CONFIG_BLK_DEV_RZ10
00=y
CONFIG_BLK_DEV_IDEP
CI=y
CONFIG_BLK_DEV_IDED
MA_PCI=y
CONFIG_BLK_DEV_IDED
MA=y
CONFIG_IDE_CHIPSETS=y
CONFIG_BLK_DEV_IDE_
MODES=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_C
OUNT=256
CONFIG_MOUSE=y
CONFIG_PSMOUSE=y
CONFIG_RTC=y
CONFIG_AUTOFS4_FS=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_ISO9660_FS=y
CONFIG_MINIX_FS=y
CONFIG_PROC_FS=y
CONFIG_DEVPTS_FS=y
CONFIG_EXT2_FS=y
CONFIG_MSDOS_PARTIT
ION=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="cp437"
CONFIG_NLS_CODEPAGE
_437=y
CONFIG_NLS_CODEPAGE
_850=y
CONFIG_NLS_ISO8859_
1=y
CONFIG_NLS_ISO8859_
15=y
CONFIG_VGA_CONSOLE=y
CONFIG_VIDEO_SELECT=y
Tani duhet të formatojmë siç duhet një disketë:
superformat /dev/fd0 hd
dhe ta bëjmë boot-abël:
syslinux â⬓s /dev/fd0
duhet t'a montojmë këtë disketë dhe të kopjojmë kernel-in:
mount /dev/fd0 /floppy
cp /usr/src/linux/arch/i386/boot/bzImage /floppy/vmlinuz
dhe të konfigurojmë siç duhet kernel-in:
rdev â⬓R /floppy/vmlinuz 1
rdev â⬓r /floppy/vmlinuz 0
rdev â⬓v /floppy/vmlinuz â⬓1
rdev /floppy/vmlinuz /dev/ram0
rdev është një utility për të ndryshuar 'në fluturim'disa parametra të kernel. Sipas rradhës kemi vendosur filesystem root vetëm në lexim, fiksuar në 0 madhësinë e diskut RAM, vendosur modalitetin video normale, dhe së fundi kemi ndryshuar filesystem di root që nuk do të jetë më disku fiks por një disk RAM.
Hapi i mëtejshëm është konfigurimi i SysLinux siç duhet. File i konfigurimit duhet të gjendet në root të disketës (pra në shembullin tonë në /floppy) dhe duhet të quhet syslinux.cfg:
DEFAULT vmlinuz
APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd0 disksize=1.44
TIMEOUT 0
DISPLAY boot.txt
PROMPT 1
F1 f1.txt
F2 f2.txt
Variabili DEFAULT specifikon emrin (dhe pozicionin eventual) të kernel që do të ngarkohet, APPEND lejon të specifikojmë disa mundësi: në veçanti load_ramdisk, prompt_ramdisk dhe ramdisk_size japin mundësinë të specifikojmë që kernel dhe particioni root do të ngarkohen në një disk RAM të madhësisë së specifikuar, dhe pasi të jetë ngarkuar kernel-i do të kërkohet një disketë e dytë (root=/dev/fd0) që përmban filesystem root që do të ngarkohet në kujtesë.
DISPLAY lejon specifikimin e një file me një mesazh përshëndetje, dhe F1 e F2 specifikojnë dy file të tjerë që do të hapen kur të shtypen pulsantët përkatës.
SysLinux lejon të specifikojmë konfigurime të mëtejshme, por për shpjegime dhe informacione është mirë të konsultoni file e tekstit syslinux.doc të përfshirë në pakon e SysLinux.
Kështu disketa e Boot u kompletua, më poshtëë lista e files që ndodhen në të:
-rwxr-xr-x 1 root root 647 Jan 22 10:45 boot.txt
-rwxr-xr-x 1 root root 405 Jan 22 10:47 f1.txt
-rwxr-xr-x 1 root root 325 Jan 22 10:50 f2.txt
-rwxr-xr-x 1 root root 9608 Jan 22 15:03 kernel.cfg
-r-xr-xr-x 1 root root 5860 Jan 22 14:58 ldlinux.sys
-rwxr-xr-x 1 root root 347 Jan 22 15:21 syslinux.cfg
-rwxr-xr-x 1 root root 537855 Jan 22 15:32 vmlinuz
Mbasi mbaron me ngarkimin e kernel sistemi monton filesystem kryesor në vetëm lexim dhe i kalon komandën init-it që kujdeset të kompletojë konfigurimin e sistemit: init monton filesystem virtuale /proc, rimonton filesystem kryesor me hyrje në lexim dhe shkrim, dhe konfiguron konsolet në dispozicion duke i kaluar kontrollin login-it për të autentikuar përdoruesit që duan të kenë një shell.
Edhe pse BusyBox vinte në dispozicion init, vendosëm të preferojmë programin origjinal, sepse gjatë fazës së boot ndeshëm me disa probleme. Shell i përdorur nga sistema është sh, që është një lidhje simbolike me shell-in e preferuar, në shembull Bash.
/dev
Directory /dev duhet të përmbajë të gjithë device që i nevoiten sistemit, në menyrë të veçantë nevoiten: ram0 (d.m.th. filesystem i root), tty? (konsole e sistemit) dhe konsole (që identifikon konsolën e parë të lirë, zakonisht tty1), core, kmem dhe null (për funksionimin korrekt të sistemit), si dhe disqet, floppy, cdrom dhe njësi me shirit mbi të cilët duam të punojmë.
crw--w--w- 1 root tty 5, 1 Jan 23 16:47 konsole
lrwxrwxrwx 1 root root 11 Jan 15 22:13 core -> /proc/kcore
brw-rw---- 1 root root 2, 0 Gu 5 2000 fd0
brw-rw---- 1 root root 3, 1 Gu 5 2000 hda1
brw-rw---- 1 root root 3, 2 Gu 5 2000 hda2
brw-rw---- 1 root root 3, 3 Gu 5 2000 hda3
brw-rw---- 1 root root 3, 4 Gu 5 2000 hda4
brw-rw---- 1 root root 3, 5 Gu 5 2000 hda5
brw-rw---- 1 root root 3, 6 Gu 5 2000 hda6
brw-rw---- 1 root disk 3, 65 Jan 25 22:18 hdb1
brw-rw---- 1 root disk 3, 66 Jan 25 22:18 hdb2
brw-rw---- 1 root disk 3, 67 Jan 25 22:18 hdb3
brw-rw---- 1 root disk 3, 68 Jan 25 22:18 hdb4
brw-rw---- 1 root disk 3, 69 Jan 25 22:18 hdb5
brw-rw---- 1 root disk 3, 70 Jan 25 22:18 hdb6
brw-rw---- 1 root disk 22, 1 Jan 25 22:18 hdc1
brw-rw---- 1 root disk 22, 2 Jan 25 22:18 hdc2
brw-rw---- 1 root disk 22, 3 Jan 25 22:18 hdc3
brw-rw---- 1 root disk 22, 4 Jan 25 22:18 hdc4
brw-rw---- 1 root disk 22, 5 Jan 25 22:18 hdc5
brw-rw---- 1 root disk 22, 6 Jan 25 22:18 hdc6
brw-rw---- 1 root disk 22, 65 Jan 25 22:19 hdd1
brw-rw---- 1 root disk 22, 66 Jan 25 22:19 hdd2
brw-rw---- 1 root disk 22, 67 Jan 25 22:19 hdd3
brw-rw---- 1 root disk 22, 68 Jan 25 22:19 hdd4
brw-rw---- 1 root disk 22, 69 Jan 25 22:19 hdd5
brw-rw---- 1 root disk 22, 70 Jan 25 22:19 hdd6
crw-r----- 1 root root 1, 2 Gu 5 2000 kmem
srw-rw-rw- 1 root root 0 Jan 25 00:54 log
crw-rw-rw- 1 root root 1, 3 Gu 5 2000 null
brw-rw---- 1 root root 1, 0 Gu 5 2000 ram0
crw------- 1 root root 4, 1 Jan 15 22:13 tty1
crw-rw-rw- 1 root tty 4, 10 Jan 29 12:43 tty10
crw-rw-rw- 1 root tty 4, 11 Jan 29 12:43 tty11
crw-rw-rw- 1 root tty 4, 12 Jan 29 12:43 tty12
crw------- 1 root root 4, 2 Jan 15 22:11 tty2
crw--w--w- 1 root root 4, 3 Jan 22 23:07 tty3
crw--w--w- 1 root root 4, 4 Jan 22 23:15 tty4
crw--w--w- 1 root root 4, 5 Jan 25 23:22 tty5
crw--w--w- 1 root root 4, 6 Jan 29 12:43 tty6
crw-rw-rw- 1 root root 4, 7 Jan 29 12:43 tty7
crw-rw-rw- 1 root tty 4, 8 Jan 29 12:43 tty8
crw-rw-rw- 1 root tty 4, 9 Jan 29 12:43 tty9
Files device duhet të kopjohen me:
cp â⬓dpR /dev/file /mnt/file
ose mund të konfigurohen me mknod, duke ndjekur dokumetet që shoqërojnë kernel.
/etc
Në /etc arkivohen të gjithë files e konfigurimit të sistema, në veçanti:
-rw-r--r-- 1 root root 180 Jan 25 01:07 fstab
-rw-r--r-- 1 root root 13 Jan 25 23:17 group
-rw-r--r-- 1 root root 186 Jan 25 23:16 inittab
-rw-r--r-- 1 root root 31 Jan 23 16:23 issue
-rw-r--r-- 1 root root 546 Jan 22 23:09 ld.so.cache
-rw-r--r-- 1 root root 4500 Jan 23 19:06 login.defs
-r--r--r-- 1 root root 0 Jan 22 22:43 mtab
-rw-r--r-- 1 root root 149 Jan 23 19:57 pam.conf
-rw-r--r-- 1 root root 27 Jan 25 23:17 passwd
drwxr-xr-x 2 root root 4096 Jan 29 13:31 rc.d
/etc/inittab është file i konfigurimit të init:
id:2:initdefault:
si::sysinit:/etc/rc.d/rcS
st::once:/sbin/setup
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
ca::ctrlaltdel:/sbin/shutdown -n -t5 -a -r now
Fusha e parë identifikon emrin e procesit, e dyta përcakton se mbi kë runlevel të operohet, fusha e tretë dhe e katërt përcaktojnë llojin e procesit. Në shembullin tonë id identifikon runlevel e default, zbatohet script-i i konfigurimit rcS, që gjendet në diretory rc.d, st zbaton një script të setup eventual, i nevojshëm po të duam të automatizojmë disa operacione, 1 dhe 2 inicializon dy konsolet e para dhe ca rifillon sistemin po të shtypim pulsantet Ctrl+Alt+Del.
Sscripti /etc/rc.d/rcS monton të gjithë particionet e përcaktuara në fstab (përfshirë esencialen /proc), pastaj rimonton filesystem / në lexim dhe shkrim, duke vënë në funksionim log e sistemit dhe duke shfaqur në konsolet 3,4 dhe 5 mesazhet e ndryshme:
#!/bin/sh
/bin/mount -av
/bin/mount -o remount,rw /dev/ram0 /
/bin/hostname shtëpi
/sbin/syslogd -K -m 0
/usr/bin/tail -f /var/log/messages > /dev/tty3 &
/bin/dmesg > /dev/tty4 &
/usr/bin/tail -f /proc/kmsg > /dev/tty5 &
exit 0
File /etc/fstab përcakton particionet dhe pikën e lidhjes me filesystem qendror :
/dev/ram0 / ext2 defaults,noauto 0 0
proc /proc proc defaults 0 0
/dev/fd0 /mnt/floppy auto defaults,user,noauto 0 0
/dev/cdrom /mnt/cdrom iso9660 defaults,ro,user,noauto 0 0
File /etc/issue është një file teksti dhe përmban mesazhin që shfaqet së bashku me login.
File /etc/mtab, i krijuar bosh sepse mirëmbahet automatikisht nga mount, përmban particionet e montuara.
Files /etc/passwd /etc/group /etc/login.defs dhe /etc/pam.conf mirëmbajnë (kontrollojnë) procedurë e login dhe autentikimin relativ. Zakonisht autentikimi në Linux kryhet me anë të PAM (Pluggable Autentication Modules) që janë disa libreri që kontrollojnë procedurën e login duke i rritur në menyrë të ndjeshme sigurinë. Me qenë se jemi duke krijuar një disk për boot, siguria nuk është problemi kryesor, prandaj do të disaktivojmë të gjitha këto opcione. Një alternativë është rikompilimi i login pa suportin PAM.
/etc/passwd përmban emrin e përdoruesit që do të përdoret për login pa password sepse kjo është disaktivuar:
root::0:0:root:/:/bin/bash
/etc/group përmban grupin në të cilin bë pjesë përdoruesi i pëcaktuar në /etc/passwd:
root::0:root
File /etc/pam.conf kontrollon konfigurimin e PAM:
other auth required pam_permit.so
other account required pam_permit.so
other password required pam_permit.so
other session required pam_permit.so
File /etc/login.defs kontrollon opcionet e tjera që nuk mirëmbahen nga PAM:
FAIL_DELAY 3
NOLOGIN_STR NOLOGIN
ENV_HZ HZ=100
ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin
ENV_PATH PATH=/bin:/usr/bin
TTYGROUP tty
TTYPERM 0600
ERASECHAR 0177
KILLCHAR 025
UMASK 022
LOGIN_RETRIES 3
LOGIN_TIMEOUT 60
PASS_MAX_LEN 8
DEFAULT_HOME no
CLOSE_SESSIONS no
/lib
Directory /lib përmban të gjithë libraritë e nevojshme për funksionimin e programeve. Për të parë çfarë librarish duhet të instalojmë shkruajmë:
ldd programi
Output do të na japë të gjithë libreritë e duhura për programin. Në menyrë të veçantë në /lib/security duhet të kopjojmë librerinë pam_permit.so e nevojshme për PAM. Megjithatë ja lista e librerive të nevojshme për shembullin:
-rwxr-xr-x 1 root root 83971 Jan 15 15:42 ld-2.1.3.so
lrwxrwxrwx 1 root root 11 Jan 25 00:38 ld-linux.so.2 -> ld-2.1.3.so
-rwxr-xr-x 1 root root 888596 Jan 15 15:42 libc-2.1.3.so
lrwxrwxrwx 1 root root 13 Jan 25 00:38 libc.so.6 -> libc-2.1.3.so
lrwxrwxrwx 1 root root 17 Jan 25 00:40 libcom_err.so.2 -> libcom_err.so.2.0
-rw-r--r-- 1 root root 5244 Jan 15 15:42 libcom_err.so.2.0
-rw-r--r-- 1 root root 20112 Jan 15 15:42 libcrypt-2.1.3.so
lrwxrwxrwx 1 root root 17 Jan 25 00:46 libcrypt.so.1 -> libcrypt-2.1.3.so
-rw-r--r-- 1 root root 9372 Jan 15 15:42 libdl-2.1.3.so
lrwxrwxrwx 1 root root 14 Jan 25 00:38 libdl.so.2 -> libdl-2.1.3.so
lrwxrwxrwx 1 root root 13 Jan 25 00:41 libe2p.so.2 -> libe2p.so.2.3
-rw-r--r-- 1 root root 12300 Jan 15 15:42 libe2p.so.2.3
lrwxrwxrwx 1 root root 16 Jan 25 00:40 libext2fs.so.2 -> libext2fs.so.2.4
-rw-r--r-- 1 root root 66000 Jan 15 15:42 libext2fs.so.2.4
lrwxrwxrwx 1 root root 17 Jan 25 00:38 libncurses.so.5 -> libncurses.so.5.0
-rw-r--r-- 1 root root 232780 Jan 15 15:42 libncurses.so.5.0
-rw-r--r-- 1 root root 31020 Jan 15 15:42 libnss_files-2.1.3.so
lrwxrwxrwx 1 root root 21 Jan 25 00:48 libnss_files.so.2 -> libnss_files-2.1.3.so
lrwxrwxrwx 1 root root 14 Jan 25 00:39 libpam.so.0 -> libpam.so.0.72
-rw-r--r-- 1 root root 27180 Jan 15 15:42 libpam.so.0.72
lrwxrwxrwx 1 root root 19 Jan 25 00:39 libpam_misc.so.0 -> libpam_misc.so.0.72
-rw-r--r-- 1 root root 6060 Jan 15 15:42 libpam_misc.so.0.72
lrwxrwxrwx 1 root root 14 Jan 25 00:40 libuuid.so.1 -> libuuid.so.1.2
-rw-r--r-- 1 root root 7752 Jan 15 15:42 libuuid.so.1.2
drwxr-xr-x 2 root root 4096 Jan 15 22:58 security
Libraria libnss_files.so.2 nuk rezultonte e nevojshme kur analizuam output e ldd, por rezultoi e domosdoshme për të kompletuar procedurën e login.
/mnt /proc /tmp
Directory /mnt përmban vetëm disa nëndirectory që nevoiten për të pasur hyrje në dispozitivët e tjerë të arkivimit, si floppy, një disk fiks apo një njësi backup.
Directory /proc dhe /tmp krijohen boshe, por janë të nevojshme: e para për kontrollin e proceseve, e dyta për të shpëtuar të dhëna të përkohëshme.
/var
Directory /var përmban dy directory /var/log dhe /var/run: e para përmban një file bosh (messages) ku do të arkivohen mesazhet e sistemit, ndërsa në directory e dytë do të shpëtohen PID e proceseve në ekzekutim.
Root
Për të përgatitur një filesystem root duhet të kemi në dispozicion një suport arkivues të pavarur nga pjesa tjetër e sistemit, si p.sh. një particion të lirë apo një disk fiks të papërdorur. Zgjidhja më e thjeshtë konsiston në përdorimin e një disku RAM.
Me qenëse kemi si qëllim krijimin e një imagjine sa më të vogël që të jetë e mundur, veprimi i parë që duhet të kryejmë është zbrazja e përmbajtjes së kujtesës që do të përdorim për diskun tonë të root:
dd if=/dev/zero of=/dev/ram0 bs=1k count=16384
ku count indikon madhësinë e diskut RAM (në këtë rast 16384, por zakonisht mjafton 4096, d.m.th.4 mega). Përpara se të montojmë diskun duhet të krijojmë një particion:
mke2fs â⬓m 0 /dev/ram0
mount /dev/ram0 /mnt
Tani disku është gati për tu mbushur me një bashkësi minimum files dhe directory për funksionimin korrekt; një filesystem Linux përmban zakonisht direcory që vijojnë:
drwxr-xr-x 2 root root 4096 Jan 23 16:39 bin
drwxr-xr-x 2 root root 20480 Jan 29 12:43 dev
drwxr-xr-x 3 root root 4096 Jan 23 20:25 etc
drwxr-xr-x 3 root root 4096 Jan 25 00:48 lib
drwxr-xr-x 5 root root 4096 Jan 22 17:53 mnt
drwxr-xr-x 2 root root 4096 Jan 15 22:12 proc
drwxr-xr-x 2 root root 4096 Jan 25 23:17 sbin
drwxrwxrwx 2 root root 4096 Jan 22 14:21 tmp
drwxr-xr-x 4 root root 4096 Jan 29 12:44 usr
drwxr-xr-x 4 root root 4096 Jan 29 13:48 var
/bin /sbin /usr/bin /usr/sbin
Këto directory përmbajnë të gjithë të zbatueshmet e sistemit: në veçanti /sbin dhe /usr/sbin përmbajnë programet e zbatueshëm përgjithësisht vetëm nga përdoruesi root.
Ekzistojnë disa utility që përmbledhin në vetvete shumë nga programet që duhet të kopjojmë. Këtu do të përdorim BusyBox, që jep funksionin për programet e mëposhtëëm:
<komanda BusyBox>
Pra mund të krijojmë link simbolikë me BusyBox për çdo funksion të vetë BusyBox, duke arritur të kursejmë një hapsirë të madhe:
ln â⬓s /bin/busybox emrilink
/bin
-rwxr-xr-x 1 root root 461400 Jan 15 22:36 bash
-rwxr-xr-x 1 root root 118204 Jan 22 12:09 busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:17 cat -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:18 chgrp -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:17 chmod -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:18 chown -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:20 cp -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:20 date -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:21 dd -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:21 df -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:21 dmesg -> busybox
-rwxr-xr-x 1 root root 7148 Jan 15 15:42 echo
lrwxrwxrwx 1 root root 7 Jan 22 16:32 false -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:23 grep -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:34 gunzip -> busybox
-rwxr-xr-x 1 root root 10296 Jan 15 15:42 hostname
lrwxrwxrwx 1 root root 7 Jan 22 16:24 kill -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:25 ln -> busybox
-rwsr-xr-x 1 root root 36188 Jan 15 22:36 login
lrwxrwxrwx 1 root root 7 Jan 22 16:26 ls -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:26 mkdir -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:27 mknod -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:27 mktemp -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:27 more -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 15:57 mount -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:20 mv -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:28 ping -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:28 p.s. -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:28 pwd -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:29 rm -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:29 rmdir -> busybox
lrwxrwxrwx 1 root root 4 Jan 23 16:39 sh -> bash
lrwxrwxrwx 1 root root 7 Jan 22 16:29 sleep -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:29 sync -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:32 tar -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:32 true -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:38 tty -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:38 umount -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:38 uname -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:38 uptime -> busybox
lrwxrwxrwx 1 root root 7 Jan 22 16:39 zcat -> busybox
/sbin
-rwxr-xr-x 1 root root 75696 Shk 21 2000 e2fsck
-rwxr-xr-x 1 root root 87068 Jan 15 15:42 fdisk
-rwxr-xr-x 1 root root 13724 Jan 15 22:35 getty
-rwxr-xr-x 1 root root 27856 Jan 15 15:42 init
-rwxr-xr-x 1 root root 19536 Shk 21 2000 mke2fs
lrwxrwxrwx 1 root root 12 Jan 22 17:55 mkswap -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:55 reboot -> /bin/busybox
-rwxr-xr-x 1 root root 18 Jan 26 00:44 setup
-rwxr-xr-x 1 root root 14900 Jan 15 15:42 shutdown
lrwxrwxrwx 1 root root 12 Jan 22 17:55 swapoff -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:55 swapon -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:55 syslogd -> /bin/busybox
/usr/bin
lrwxrwxrwx 1 root root 12 Jan 22 17:56 chvt -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:47 clear -> /bin/busybox
-rwxr-xr-x 1 root root 11916 Jan 15 15:42 cut
lrwxrwxrwx 1 root root 12 Jan 22 17:56 du -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:56 find -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:56 head -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:56 id -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:56 killall -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:57 logger -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:57 logname -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:57 tail -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:57 touch -> /bin/busybox
/usr/sbin
lrwxrwxrwx 1 root root 12 Jan 22 17:56 chroot -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 22 17:56 fbset -> /bin/busybox
Hapi i mëtejshëm është komprimimi i pasqyrës së diskut të sapo krijuar dhe kopjimi në disketë:
umount /mnt
dd if=/dev/ram0 bs=1k | gzip â⬓v9 > root.gz
cp root.gz /dev/fd0
Nuk na ngelet tjetër veç rinisjes së sistemit dhe të provojmë disketat e sapokrijuara.
Files e shembullit janë krijuar duke përdorur shpërndarjen Debian 2.1 me kernel 2.4.0, duke u mbështetur tek How-To që ndodhen në
http://www.pluto.linux.it/ në lidhje me boot dhe nga vetë disketat e nisjes së Debian. Kjo do të thotë që duke përdorur shpërndarje të ndryshme, programe dhe librari të versioneve të ndryshme mund të verifikohen gabime të ndryshme. Për të zgjidhur një pjesë të këtyre gabimeve pa qenë e nevojshme të rinisni sistemin këshillohet të përdorni:
chroot /mnt
ku /mnt është pika e lidhjes së /dev/ram0. Në këtë menyrë ndryshohet filesystem i root e nevojshme për të testuar p.sh. koerencën midis librarive dhe programeve. Ana negative qëndron në atë që kështu nuk mund të verifikohen gabimet e mundëshme që vijnë përpara fazës së login (p.sh. init).
Një gabim tjetër i zakonshëm është pamundësia e ekzekutimit të disa programeve (p.sh. shutdown): kjo ndodh sepse programet e tillë thërrasin programe të tjera. Për të zgjidhur këtë problem mund të përdoret:
strings emriprogramit
dhe të studiohet output për të kuptuar kush e bllokon ekzekutimin e atij programi.
Utility
Një disketë shtesë mund të hyjë në punë për të pasur programe apo modulë shtesë, që, p.sh., mundësojnë rekuperimin e një backup nga kaseta. Po të vendosni të përdorni modulët këta duhet të ndodhen në directory /lib/versione-kernel dhe duhet edhe të instaloni mod-utils.